如果已经回答,请道歉.我今天经历了很多例子,但我找不到任何符合我要做的事情. 我有一个数据集,我需要计算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