我有一个包含多个组的数据表。如果vals
中的值不存在,我希望用包含这些值的行填充每个组。其他列应填充NA。
DT = data.table(group = c(1,1,1,2,2,3,3,3,3), val = c(1,2,4,2,3,1,2,3,4), somethingElse = rep(1,9))
vals = data.table(val = c(1,2,3,4))
我想要的:
group val somethingElse
1: 1 1 1
2: 1 2 1
3: 1 3 NA
4: 1 4 1
5: 2 1 NA
6: 2 2 1
7: 2 3 1
8: 2 4 NA
9: 3 1 1
10: 3 2 1
11: 3 3 1
12: 3 4 1
val
的阶不一定必须增加,值也可以附加在每个组的开始/结束处。
我不知道如何处理这个问题。我曾想过使用rbindlist(...,fill = TRUE)
,但这样的话值将被简单地追加。我认为一些DT[, lapply(...), by = c("group")]
表达式可能在这里有用,但我不知道如何检查值是否已经存在。
2条答案
按热度按时间lsmd5eda1#
可以使用交叉联接:
zsbz8rwp2#
我只想为稍微复杂一点的情况加上这个答案:
在这里,我想将
DTxy
中的所有x
、y
组合添加到DT
中的每个组(如果还没有)。我写了一个函数来处理子集。
然后,我将该函数应用于每个组:
结果: