我花了很多时间寻找一个运气不大的答案。我有一些时间序列数据,需要折叠并创建该数据中每第n行的滚动平均值。看起来这在动物园可能是可能的,也许是hmisc,我相信其他包。我需要平均行1,2,3然后3,4,5然后5,6,7等等。我的数据看起来像是这样,有数以千计的观察结果:
id time x.1 x.2 y.1 y.2
10 1 22 19 0 -.5
10 2 27 44 -1 0
10 3 19 13 0 -1.5
10 4 7 22 .5 1
10 5 -15 5 .33 2
10 6 3 17 1 .33
10 7 6 -2 0 0
10 8 44 25 0 0
10 9 27 12 1 -.5
10 10 2 11 2 1
我想在完成时看起来像这样:
id time x.1 x.2 y.1 y.2
10 1 22.66 25.33 -.33 -.66
10 2 3.66 13.33 .27 .50
时间var 1实际上是1,2,3的平均时间,2是3,4,5的平均值,但此时时间var对于保持不重要。我需要按ID分组,因为它最终会改变。我能弄清楚如何成功完成这一操作的唯一方法是使用Lag()并将新行引导为1,将另一行引导为2然后对列进行平均。之后你必须删除所有其他行
1 NA NA
2 1 NA
3 2 1
4 3 2
5 4 3
使用123和345并删除234 ...为每个var执行此操作会非常离谱,尤其是在我收集新数据时。
任何想法?非常感谢帮助
答案 0 :(得分:0)
这样的事可能吗?
# sample data
id <- c(10,10,10,10,10,10)
time <- c(1,2,3,4,5,6)
x1 <- c(22,27,19,7,-15,3)
x2 <- c(19,44,13,22,5,17)
df <- data.frame(id,time,x1,x2)
means <- data.frame(rollmean(df[,c(1,3:NCOL(df))], 3))
means <- means[c(T,F),]
means$time <- seq(1:NROW(means))
row.names(means) <- 1:NROW(means)
> means
id x1 x2 time
1 10 22.666667 25.33333 1
2 10 3.666667 13.33333 2