【发布时间】:2017-07-13 19:28:45
【问题描述】:
嗨,我有一个 df 和如何计算前 N 行的滚动平均值,在我的情况下是 3
df <- data.frame(X=c(24,NA,NA,45,NA,20,24,10,40,20,20), Y=c(10,NA,14,14,14,10,NA,10,14,14,14))
我试图得到如下的o/p
library(data.table)
library(zoo)
df[, Rolling.Average := rollmeanr(X, 3, fill = NA), by = Y]
o/p:
X Y Rolling.Average
24 10 NA
NA NA NA
NA 14 NA
45 14 NA
NA 14 45
20 10 NA
24 NA NA
10 10 20
40 14 NA
20 14 40
20 14 30
错误:k
【问题讨论】:
-
感谢 AEBilgrau,预期的输出是如果 Y 中的值出现在最后 3 行中,那么 Roll.Ave 中该值的 X 的平均值,即第 3 行中的 14 我们没有相同的值在前 3 行中,对于 row-id 4,它出现在前 3 行中,平均值为 NA,对于 14 的最后一行相同,前 3 行中相同值的平均值为 30
-
(我之前的评论是胡言乱语,所以在这里重述。)您的预期输出到底是什么?
Y等于NA应该如何用by参数解释?当第一个条目是NAforY时,您期望右对齐窗口的平均值是多少 -
取决于你想使用
rollapplyr(X, 3, mean, partial = TRUE)或rollapplyr(X, 3, mean, partial = TRUE, na.rm = TRUE)或rollapplyr(c(NA, NA, X), 3, mean)或rollapplyr(c(NA, NA, X), 3, mean, na.rm = TRUE) -
感谢 Grothendieck,rollapplyr(X, 3, mean, partial = TRUE, na.rm = TRUE) 给出答案
标签: r