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