簡體   English   中英

使用Apply系列功能創建多個新數據框

[英]Use Apply family function to create multiple new dataframe

我是R編程語言的新手,目前正在處理一些財務數據。 這個問題的描述有點復雜,所以我認為最好逐步進行。

首先,這是我正在處理的主數據框的一小部分(名為:log_return):

        Date    AUS.Yield   BRA.Yield    CAN.Yield    CHI.Yield    GER.Yield JAP.Yield
1 2008-01-01           NA          NA           NA           NA           NA        NA
2 2008-01-02           NA          NA           NA           NA           NA        NA
3 2008-01-03 -0.033047602 -0.01239795  0.003828977 -0.017857617 -0.031966192        NA
4 2008-01-04 -0.003922215  0.00198792 -0.008443187  0.006734032 -0.006984895        NA
5 2008-01-05           NA          NA           NA           NA           NA        NA
6 2008-01-06           NA          NA           NA           NA           NA        NA

然后,我想為每個具有特定名稱的列創建一個時間序列,例如:

AUS <- xts(log_return$AUS.Yield, log_return$Date)
BRA <- xts(log_return$BRA.Yield, log_return$Date)....

等等。 無論如何,我可以使用for循環或應用函數來創建它們,而不必一一鍵入嗎?

我在想,也許我可以創建一個數據框列表,並使用諸如AUS,BRA等名稱,並使用for循環將時間序列分配給這些名稱。 不確定這是否是正確的方法。

多謝!!!!!

使用lapply創建data.frame(動物園對象)列表的快速方法:

library(zoo)
df_list <- lapply(names(df)[-1], function(x){
  zoo(df[,c("Date", x)])
})

然后一一訪問您的data.frame:

> df_list[[1]]
  Date       AUS.Yield   
1 2008-01-01 <NA>        
2 2008-01-02 <NA>        
3 2008-01-03 -0.033047602
4 2008-01-04 -0.003922215
5 2008-01-05 <NA>        
6 2008-01-06 <NA> 

數據:

df <- structure(list(Date = c("2008-01-01", "2008-01-02", "2008-01-03", 
"2008-01-04", "2008-01-05", "2008-01-06"), AUS.Yield = c(NA, 
NA, -0.033047602, -0.003922215, NA, NA), BRA.Yield = c(NA, NA, 
-0.01239795, 0.00198792, NA, NA), CAN.Yield = c(NA, NA, 0.003828977, 
-0.008443187, NA, NA), CHI.Yield = c(NA, NA, -0.017857617, 0.006734032, 
NA, NA), GER.Yield = c(NA, NA, -0.031966192, -0.006984895, NA, 
NA), JAP.Yield = c(NA, NA, NA, NA, NA, NA)), .Names = c("Date", 
"AUS.Yield", "BRA.Yield", "CAN.Yield", "CHI.Yield", "GER.Yield", 
"JAP.Yield"), class = "data.frame", row.names = c("1", "2", "3", 
"4", "5", "6"))

這是更傳統的循環的另一種方式:

for (i in 2:length(log_return)) {
  assign(names(log_return[i]), xts(log_return[i], log_return$Date))
}

這將為data.frame中的每個列名稱創建一個xts對象-即名為AUS.YieldBRA.Yield等的xts對象...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM