当前位置 : 主页 > 手机开发 > 无线 >

多列移动平均值 – 分组数据

来源:互联网 收集:自由互联 发布时间:2021-06-10
如果已经回答,请道歉.我今天经历了很多例子,但我找不到任何符合我要做的事情. 我有一个数据集,我需要计算3点移动平均线.我在下面生成了一些虚拟数据: set.seed(1234)data.frame(Week = r
如果已经回答,请道歉.我今天经历了很多例子,但我找不到任何符合我要做的事情.

我有一个数据集,我需要计算3点移动平均线.我在下面生成了一些虚拟数据:

set.seed(1234)
data.frame(Week = rep(seq(1:5), 3), 
 Section = c(rep("a", 5), rep("b", 5), rep("c", 5)), 
 Qty = runif(15, min = 100, max = 500), 
 To =  runif(15, min = 40, max = 80))

我想根据’Qty’和’To’列的’Section’列计算每个组的MA.理想情况下,输出将是数据表.移动平均线将从第3周开始,因此将是1:3的平均值

我正在尝试掌握data.table包,所以使用它的解决方案将是伟大的,否则任何将非常感激.

仅供参考,我的实际数据集将有大约. 70个部分,总共有c.1M行.到目前为止,我发现data.table非常快速地处理这些卷.

我们可以结合data.table使用zoo包中的rollmean.

library(data.table)
library(zoo)
setDT(df)[, c("Qty.mean","To.mean") := lapply(.SD, rollmean, k = 3, fill = NA, align = "right"), 
              .SDcols = c("Qty","To"), by = Section]
 > df
 #   Week Section      Qty       To Qty.mean  To.mean
 #1:    1       a 145.4814 73.49183       NA       NA
 #2:    2       a 348.9198 51.44893       NA       NA
 #3:    3       a 343.7099 50.67283 279.3703 58.53786
 #4:    4       a 349.3518 47.46891 347.3271 49.86356
 #5:    5       a 444.3662 49.28904 379.1426 49.14359
 #6:    1       b 356.1242 52.66450       NA       NA
 #7:    2       b 103.7983 52.10773       NA       NA
 #8:    3       b 193.0202 46.36184 217.6476 50.37802
 #9:    4       b 366.4335 41.59984 221.0840 46.68980
#10:    5       b 305.7005 48.75198 288.3847 45.57122
#11:    1       c 377.4365 72.42394       NA       NA
#12:    2       c 317.9899 61.02790       NA       NA
#13:    3       c 213.0934 76.58633 302.8400 70.01272
#14:    4       c 469.3734 73.25380 333.4856 70.28934
#15:    5       c 216.9263 41.83081 299.7977 63.89031
网友评论