嗨我有一个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 如有任何上述代码修改,请提出建议 感谢
答案 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]
产生相同的输出。它与您的预期输出不符,但我真的不明白应该如何达到这一点。