简体   繁体   English

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM