2016-02-05 60 views
2

比方说,我有价格向量:加入Na对矢量

foo <- c(102.25,102.87,102.25,100.87,103.44,103.87,103.00) 

我想从X的百分比变化周期前,并说,将其存储到,我会打电话给log_returns另一个向量。我无法将矢量foo和log_returns绑定到data.frame中,因为矢量长度不同。所以我想能够将NA附加到log_returns,以便我可以将它们放入data.frame中。我想通了,在向量的末尾追加一个NA的一种方式:

log_returns <- append((diff(log(foo), lag = 1)),NA,after=length(foo)) 

但是如果我之前1期看百分比的变化,只有帮助。我正在寻找填补NA的方法,无论我投入多少时差,以便百分比变化矢量在长度上等于foo矢量

任何帮助将不胜感激!

+0

您可以在列表中存储,而不是 – 2016-02-05 01:59:50

+4

下面的答案是好的,但更普遍的,如果你有长度不等矢量的列表,你可以这样做例如'l < - list(1,1:2,1:5); data.frame(lapply(l,\'length < - \',max(lengths(l))))' – rawr

回答

1

你可以使用你自己的差异的修正:

mydiff <- function(data, diff){ 
    c(diff(data, lag = diff), rep(NA, diff)) 
} 

mydiff(foo, 1) 
[1] 0.62 -0.62 -1.38 2.57 0.43 -0.87 NA 

data.frame(foo = foo, diff = mydiff(foo, 3)) 

    foo diff 
1 102.25 -1.38 
2 102.87 0.57 
3 102.25 1.62 
4 100.87 2.13 
5 103.44 NA 
6 103.87 NA 
7 103.00 NA 
+0

伟大的解决方案。谢谢。 – huesecon