假设我有一个数据帧:
df <- data.frame(group = c('A','A','A','B','B','B','C','C','C'),
time = c(1,2,4,1,2,3,5,7,8),
data = c(5,6,7,8,9,10,1,2,3))
我想做的是将数据插入到序列中缺少的数据框中。所以在上面的例子中,我缺少 A 组的时间 = 3、B 组的时间 = 4 和 C 组的时间 = 6 的数据。我本质上想把 NA 放在数据列的位置。 我将如何添加这些额外的行? 我需要一个通用的解决方案 注意:我编辑了问题,因为之前有一个错误 我们不能假设每个组只有 4 个观测值。
目标是:
df <- data.frame(group = c('A','A','A','A','B','B','B','C','C','C','C'),
time = c(1,2,3,4,1,2,3,5,6,7,8),
data = c(5,6,NA,7,8,9,10,1,NA,2,3))
这是一个使用data.table
的选项。 将"data.frame"转换为"data.table"(setDT(df)
),将按"组"分组的数据集从"时间"的min
扩展到max
,并on
"组"和"时间"列连接。
library(data.table)
setDT(df)[df[, .(time = min(time):max(time)) , by = group], on = c("group", "time")]
# group time data
# 1: A 1 5
# 2: A 2 6
# 3: A 3 NA
# 4: A 4 7
# 5: B 1 8
# 6: B 2 9
# 7: B 3 10
# 8: C 5 1
# 9: C 6 NA
#10: C 7 2
#11: C 8 3