2015-06-12 62 views
0

我是R編程語言的新手,目前正在處理一些財務數據。這個問題有點複雜,所以我認爲最好是逐步開始。使用應用系列函數創建多個新的數據框

首先這裏是主數據框的一小部分

 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..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 

然後我想創建具有特定名稱的各列的時間序列,例如:::我的工作(名爲log_return)

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

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

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

很多thx !!!!!

回答

0

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

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對象

+0

太謝謝你了!它解決了我的問題。 –

1

的快速方法與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., 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")) 
相關問題