我有一些数据,其中经常包含各个时间段之间缺少的观察结果。我想填写这些观察值,适当地增加时间段,但要以观察值为条件。这是一个示例:
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和组不匹配。
答案 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