【问题标题】:Time series data frame in RR中的时间序列数据框
【发布时间】:2015-07-28 16:41:30
【问题描述】:

目前,我有一个数据框 (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)。所以取每个数据点除以前n天的滚动平均值。

尝试: (1) 我知道 zoo 包有 rollapply,我可以用它来创建 (B)。但是,如果除了均值之外我还想计算其他东西(比如标准差或乘积?)。 (2) 是否有任何功能可以做到这一点,或者我是否必须遍历 (A) 中的每个日期,然后检查 (B) 中的相应值(平均值、标准差或乘积)以进行划分? (这将非常低效)。

感谢您的帮助!

【问题讨论】:

  • 阅读动物园小插曲——这类问题在那里得到了很好的回答。是的,rollapply 是众多可能性之一。

标签: r dataframe zoo moving-average


【解决方案1】:

在标题行添加日期,创建动物园对象A,B,Candcbind BandC`连同标准差:

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

【讨论】:

  • 如果我想要一个称重的 sd,我将如何修改 rollapplyr 函数?另外,rollapplyr 与 rollapply 有何不同?
猜你喜欢
  • 1970-01-01
  • 2020-07-11
  • 2015-04-13
  • 2021-09-16
  • 2018-09-12
  • 1970-01-01
  • 2012-05-15
  • 2013-02-12
  • 1970-01-01
相关资源
最近更新 更多