滞后和总结时间序列数据

时间:2017-11-03 06:20:25

标签: r time-series lag data-manipulation

我花了很多时间寻找一个运气不大的答案。我有一些时间序列数据,需要折叠并创建该数据中每第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执行此操作会非常离谱,尤其是在我收集新数据时。

任何想法?非常感谢帮助

1 个答案:

答案 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