我正在尝试按组ID合并两个数据帧。但是,两个数据帧的长度都不相同,并且第二个数据帧中缺少某些组的某些元素。在合并的文件中,某个组的缺失元素应为NA。
数据看起来像这样
df1 <- data.frame(id = c(1,1,1,2,3,3,4), x = c("a", "b", "c", "d", "e", "f", "g"))
df2 <- data.frame(id = c(1,1,2,3,4), y = c("A", "B", "D", "E", "G"))
理想情况下,结果如下所示:
id x y
1 a A
1 b B
1 c <NA>
2 d D
3 e E
3 f <NA>
4 g G
如果代码可用于也对应于相同组ID但可能会丢失不同位置元素的其他列,那就太好了。
到目前为止,我已经尝试过full_join
和merge
,但没有成功,因为它们只是表示y值而不是引入na。
我知道那里也有类似的问题,但是我发现没有一个可以解决这个问题。任何帮助表示赞赏。
答案 0 :(得分:1)
此data.table
解决方案可能有效。.
首先,为每个组创建row_id。这些行ID上的ID联接。
library(data.table)
dt1 <- data.table(id = c(1,1,1,2,3,3,4), x = c("a", "b", "c", "d", "e", "f", "g"))
dt2 <- data.table(id = c(1,1,2,3,4), y = c("A", "B", "D", "E", "G"))
#rumber rows by group
dt1[ , row_id := seq.int(1:.N), by = .(id)]
dt2[ , row_id := seq.int(1:.N), by = .(id)]
dt1[dt2, y := i.y, on = .(id, row_id)][, row_id := NULL][]
# id x y
# 1: 1 a A
# 2: 1 b B
# 3: 1 c <NA>
# 4: 2 d D
# 5: 3 e E
# 6: 3 f <NA>
# 7: 4 g G