我要用棒子填写一组中缺少的行,其中一组由特定的(id1,id2)定义。
例如我有一个数据集
id1 id2 year value
33 29 1990 3.5
33 29 1993 3.3
33 29 1994 3.1
32 28 1992 3.1
32 28 1993 4.5
我想获得以下数据集
id1 id2 year value
33 29 1990 3.5
33 29 1991 NA
33 29 1992 NA
33 29 1993 3.3
33 29 1994 3.1
32 28 1992 3.1
32 28 1993 4.5
请注意,year==1991,year==1992
不需要为第二组创建具有的行。该示例得到了简化,但是该解决方案应该适用于字符串/数字,并且适用于多个值列,而不只是一个。
怎么样?
require(data.table)
DT = data.table(id1 = c(33,33,33,32,32),
id2 = c(29,29,29,28,28),
year = c(1990,1993,1994,1991,1992),
value = c(3.5,3.3,3.1,3.1,4.5))
setkey(DT, id1,id2,year)
ans = DT[, list(year = seq.int(year[1L], year[.N])), by = list(id1,id2)]
ans = DT[setkey(ans)]
# id1 id2 year value
# 1: 32 28 1991 3.1
# 2: 32 28 1992 4.5
# 3: 33 29 1990 3.5
# 4: 33 29 1991 NA
# 5: 33 29 1992 NA
# 6: 33 29 1993 3.3
# 7: 33 29 1994 3.1
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句