目前,我有一个数据框(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或乘积)进行除法? (这将非常低效)。
感谢您的帮助!
答案 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