[英]How to calculate rolling mean for last N rows for every row
Hi I have a df and How to calculate rolling mean for previous N rows ,In my case it is 3 嗨,我有一个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)
) 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)
)
I tried to get o/p as below 我试图得到以下的o / p
library(data.table)
library(zoo)
df[, Rolling.Average := rollmeanr(X, 3, fill = NA), by = Y]
o/p: 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
Error: k <= n is not TRUE Any modifications in above code,please suggest Thanks 错误:k <= n不是TRUE上面的代码中有任何修改,请建议谢谢
The error is thrown as you have less that 3 rows for the "NA" group -- which data.table
seems to interpret as a group. 由于“ NA”组的行数少于3行,因此引发了错误data.table
似乎将其解释为一个组。
So, your data is expected to have at least three entries for each by-group. 因此,对于每个分组,您的数据应至少包含三个条目。 Then the code works (I have added a row below to your example below): 然后代码起作用(我在下面的示例中添加了一行):
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
Or, you can exclude the NA
s of the by-clause by something like: 或者,您可以通过以下方式排除该子句的NA
:
df[!is.na(Y), Rolling.Average := rollmeanr(X, k = 3, fill = NA), by = Y]
Which yields the same output. 产生相同的输出。 It does not match your expected output, but I do not really understand how one should arrive at that. 它与您的预期输出不匹配,但是我真的不明白应该如何实现。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.