R

时间:2015-05-16 23:39:21

标签: r dataframe zoo moving-average

目前,我有一个数据框(A),其中row.names为日期,两列值(Xval和Yval)

 Xval,Yval
"2015-01-01",5,6
"2015-01-02",7,4
"2015-01-05",-1,10
"2015-01-06",-4,3

我有两个主要问题:

(问题1)我想计算一个新的数据框(B),其中row.names为日期,两列为Xmean,Ymean,其中值是过去n天的滞后滚动平均值。因此,如果n = 2,则新数据框看起来像

Xval,Yval
"2015-01-02",6,5
"2015-01-05",3,7
"2015-01-06",-2.5,6.5

(问题2)然后我想采用数据帧(A)和数据帧(b)来计算新数据帧(C),其中每个日期的值是(A)/(B)。因此,请将每个数据点除以前一天的滚动平均值。

尝试: (1)我知道动物园包装有rollapply,我可以用来制作(B)。但是,如果除了平均值之外还有其他我想要计算的东西(比如标准差或产品?),该怎么办? (2)是否有任何功能可以执行此操作,或者我是否必须遍历(A)中的每个日期,然后检查(B)中的相应值(均值,sd或乘积)进行除法? (这将非常低效)。

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

将日期添加到标题行,创建动物园对象A, B , C and cbind B and C`以及标准偏差:

Lines <- 'Date,Xval,Yval
2015-01-01,5,6
2015-01-02,7,4
2015-01-05,-1,10
2015-01-06,-4,3'

library(zoo)
A <- read.zoo(text = Lines, header = TRUE, sep = ",")
B <- rollmeanr(A, 2)
C <- A/B
cbind(mean = B, ratio = C, sd = rollapplyr(A, 2, sd))

,并提供:

           Xval.mean Yval.mean Xval.ratio Yval.ratio  Xval.sd  Yval.sd
2015-01-02       6.0       5.0  1.1666667  0.8000000 1.414214 1.414214
2015-01-05       3.0       7.0 -0.3333333  1.4285714 5.656854 4.242641
2015-01-06      -2.5       6.5  1.6000000  0.4615385 2.121320 4.949747