我想构建一个移动平均,同时对两个分类变量的时间序列数据集进行聚合。尽管我看过一些其他教程,但它们似乎都没有涉及到我想要实现的特定任务。
我的原始数据集(df)每行代表一个个体(id),日期范围为0-180天(Days)。个体可以是两个数据子集中的一个成员(Group)。
然后,我将聚合这个数据框以获得两个组的日均值。
下一步是在这两组数据中构建一个移动平均值。在下面的示例数据框中,我只是使用前5天构建了一个5天的平均值。
有关如何完成此操作的任何想法?
我的原始数据集(df)每行代表一个个体(id),日期范围为0-180天(Days)。个体可以是两个数据子集中的一个成员(Group)。
然后,我将聚合这个数据框以获得两个组的日均值。
library(plyr)
summary <- ddply(df, .(Group,Days), summarise,
DV = mean(variable), resp=length(unique(Id)))
下一步是在这两组数据中构建一个移动平均值。在下面的示例数据框中,我只是使用前5天构建了一个5天的平均值。
Group Days DV 5DayMA
exceeded 0 2859
exceeded 1 2948
exceeded 2 4412
exceeded 3 5074
exceeded 4 5098 4078
exceeded 5 5147 4536
exceeded 6 4459 4838
exceeded 7 4730 4902
exceeded 8 4643 4815
exceeded 9 4698 4735
exceeded 10 4818 4670
exceeded 11 4521 4682
othergroup 0 2859
othergroup 1 2948
othergroup 2 4412
othergroup 3 5074
othergroup 4 5098 4078
othergroup 5 5147 4536
othergroup 6 4459 4838
othergroup 7 4730 4902
othergroup 8 4643 4815
othergroup 9 4698 4735
othergroup 10 4818 4670
othergroup 11 4521 4682
有关如何完成此操作的任何想法?
ave
和zoo的rollmeanr
的以下变体:transform(DF, MA = ave(DV, Group, FUN = function(x) rollmeanr(x, 5, na.pad = TRUE)))
- G. Grothendieckave
解决方案上,也只需要在一台适度的机器上花费约1.4秒。如果只进行一次计算,则使用更快的软件包可能会产生相对巨大的差异,但绝对差异很小。 - thelatemailroll_mean
替代rolmeanr
是用C++编写的,可能具有一些速度优势。 - G. Grothendieckroll_mean()
绝对比zoo的rollmean()
更快(参见这里),但它似乎缺乏处理缺失值的能力(没有na.pad
选项),所以我不知道你如何在dplyr
或本答案中的其他方法中使用它... - Andrew