【问题标题】:Impute/ fill in missing values between time periods估算/填补时间段之间的缺失值
【发布时间】:2018-12-22 04:30:13
【问题描述】:

我的数据通常包含不同时间段之间的缺失观测值。我想填写这些观察结果,适当增加时间段,但以观察值为条件。这是一个例子:

df <- data.frame(id=c("a","a","b","b"), group=c("x","x","y","z"), year=c(2000,2003,2003,2005))

这给出了4个观察数据框

  id group year
1  a     x 2000
2  a     x 2003
3  b     y 2003
4  b     z 2005

我想在这里(在 #1 和 #2 之间)对 2001 年和 2002 年进行 2 个额外的观察,因为观察 #1 和 #2 在 id 和 group 上匹配。但我不想在 #3 和 #4 之间进行额外观察,因为 id 和 group 不匹配。

【问题讨论】:

    标签: r


    【解决方案1】:

    您可以使用tidyr 中的full_seq - 它正是为这样的任务而创建的(在向量中创建完整的值序列):

    library(tidyr)
    library(dplyr)
    df %>%
      group_by(id, group) %>%
      complete(year = full_seq(year, period = 1))
    
      id    group  year
      <fct> <fct> <dbl>
    1 a     x      2000
    2 a     x      2001
    3 a     x      2002
    4 a     x      2003
    5 b     y      2003
    6 b     z      2005
    

    【讨论】:

    • 太棒了!谢谢。
    【解决方案2】:

    或使用data.table

    library(data.table)
    setDT(df)[, .(year = year[1]:year[.N]), .(id, group)]
    #   id group year
    #1:  a     x 2000
    #2:  a     x 2001
    #3:  a     x 2002
    #4:  a     x 2003
    #5:  b     y 2003
    #6:  b     z 2005
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-03-19
      • 1970-01-01
      • 2019-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-18
      相关资源
      最近更新 更多