在时间段之间估算/填写缺失值

时间:2018-07-13 18:38:26

标签: r

我有一些数据,其中经常包含各个时间段之间缺少的观察结果。我想填写这些观察值,适当地增加时间段,但要以观察值为条件。这是一个示例:

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

我想在这里(2001年和2002年)在#1和#2之间另外有2个观测值,因为观测值#1和#2在id和group上匹配。但是我不想在#3和#4之间进行其他观察,因为ID和组不匹配。

2 个答案:

答案 0 :(得分:3)

您可以使用full_seq中的tidyr-它是专门为此类任务创建的(在向量中创建完整的值序列):

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

答案 1 :(得分:1)

或使用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