【问题标题】:Insert missing rows in time series data在时间序列数据中插入缺失的行
【发布时间】:2020-04-12 14:08:37
【问题描述】:

我有一个不完整的时间序列数据框,我需要插入多行 NA 以查找缺少的时间戳。每天应该总是有 6 个时间戳,这由数据帧中的变量“信号”(1-6) 指示。我正在尝试将不完整的数据框 A 与包含所有信号的向量 B 合并。下面的简化示例数据:

B <- rep(1:6,2) 
A <- data.frame(Signal = c(1,2,3,5,1,2,4,5,6), var1 = c(1,1,1,1,1,1,1,1,1))
Expected <- data.frame(Signal = c(1,2,3,NA, 5, NA, 1,2,NA,4,5,6), var1 = c(1,1,1,NA,1,NA,1,1,NA,1,1,1)

请注意,B 表示具有多个变量的数据帧,Expected 中的 NA 是数据帧中的 NA 行。实际数据框也有更多的观察结果(总共 84 个)。

如果你们能帮助我,那就太棒了!

【问题讨论】:

    标签: r dataframe timestamp


    【解决方案1】:

    如果您已经知道一天有 6 个时间戳,您可以在没有 B 的情况下执行此操作。我们可以为每一天创建组,并使用complete 将缺失的观察结果添加到NA

    library(dplyr)
    library(tidyr)
    
    A %>%
      group_by(gr = cumsum(c(TRUE, diff(Signal) < 0))) %>%
      complete(Signal = 1:6) %>%
      ungroup() %>%
      select(-gr)
    
    #   Signal  var1
    #    <dbl> <dbl>
    # 1      1     1
    # 2      2     1
    # 3      3     1
    # 4      4    NA
    # 5      5     1
    # 6      6    NA
    # 7      1     1
    # 8      2     1
    # 9      3    NA
    #10      4     1
    #11      5     1
    #12      6     1
    

    如果在输出中您需要 Signal 作为 NA 缺少组合,您可以使用

    A %>%
      group_by(gr = cumsum(c(TRUE, diff(Signal) < 0))) %>%
      complete(Signal = 1:6) %>%
      mutate(Signal = replace(Signal, is.na(var1), NA)) %>%
      ungroup %>%
      select(-gr)
    
    #   Signal  var1
    #    <dbl> <dbl>
    # 1      1     1
    # 2      2     1
    # 3      3     1
    # 4     NA    NA
    # 5      5     1
    # 6     NA    NA
    # 7      1     1
    # 8      2     1
    # 9     NA    NA
    #10      4     1
    #11      5     1
    #12      6     1
    

    【讨论】:

    • 你刚刚救了我!非常感谢!
    • 您能否详细解释一下您发布的代码的具体作用。它有效,我很感激,但我真的不明白它的作用。
    • @BjörnButter group_by 为每个序列创建组,直到观察到较小的数字。因此 1、2、3 和 5 成为一组,1、2、4、5、6 成为另一组。现在在每个组中,我们完成了来自1:6 的序列,这意味着它将添加1:6 中缺少的数字并将NA 添加到其他列。因此,在第一组中,它会添加 4 和 6,因为它们丢失了,以此类推。
    • 还有一个问题:为什么c(TRUE,...)的开头有TRUE?
    • 因为diff返回的输出长度比原始向量小1,所以我们在开头附加TRUE
    猜你喜欢
    • 2019-09-11
    • 2020-10-22
    • 2015-09-17
    • 1970-01-01
    • 2021-07-21
    • 2019-04-22
    • 2015-07-01
    • 2021-02-28
    • 2019-05-16
    相关资源
    最近更新 更多