【问题标题】:lag and summarize time series data滞后和汇总时间序列数据
【发布时间】:2018-04-15 19:44:40
【问题描述】:

我花了很多时间寻找答案,但运气不佳。我有一些时间序列数据,需要折叠并创建该数据中每 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

时间变量 1 实际上是 1,2,3 的平均时间,2 是 3,4,5 的平均时间,但此时保持时间变量并不重要。我需要按 id 分组,因为它最终会改变。我能弄清楚如何成功做到这一点的唯一方法是使用 Lag() 并使新行领先 1 和另一行领先 2,然后在各列中取平均值。之后你必须删除每隔一行

  1  NA NA
  2  1  NA
  3  2  1
  4  3  2
  5  4  3

使用 123 和 345 并删除 234... 为每个 var 执行此操作将是令人发指的,尤其是在我收集新数据时。

有什么想法吗?非常感谢您的帮助

【问题讨论】:

    标签: r time-series lag data-manipulation


    【解决方案1】:

    可能是这样的吗?

    # 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-06
      • 2020-05-31
      • 2013-07-28
      • 2018-05-15
      • 2014-10-08
      • 2015-06-03
      • 1970-01-01
      • 2019-11-05
      相关资源
      最近更新 更多