如何计算每行的最后N行的滚动平均值

时间:2017-07-13 10:36:05

标签: r

嗨我有一个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&lt; = n不为TRUE 如有任何上述代码修改,请提出建议 感谢

1 个答案:

答案 0 :(得分:0)

错误被抛出,因为&#34; NA&#34;小组 - data.table似乎将其解释为小组。

因此,您的数据预计每个副组至少有三个条目。然后代码工作(我在下面的示例中添加了一行):

df <- data.frame(X=c(24,NA,NA,45,NA,20,24,10,40,20,20,20),
                 Y=c(10,NA,14,14,14,10,NA,10,14,14,14,NA))

library(data.table)
library(zoo)
df <- as.data.table(df)
df[, Rolling.Average := rollmeanr(X, k = 3, fill = NA), by = Y]
print(df)
#     X  Y Rolling.Average
# 1: 24 10              NA
# 2: NA NA              NA
# 3: NA 14              NA
# 4: 45 14              NA
# 5: NA 14              NA
# 6: 20 10              NA
# 7: 24 NA              NA
# 8: 10 10              18
# 9: 40 14              NA
#10: 20 14              NA
#11: 20 14              NA
#12: 20 NA              NA

或者,您可以通过以下内容排除by-clause的NA

df[!is.na(Y), Rolling.Average := rollmeanr(X, k = 3, fill = NA), by = Y]

产生相同的输出。它与您的预期输出不符,但我真的不明白应该如何达到这一点。