【发布时间】:2021-03-28 18:14:38
【问题描述】:
我想通过以下方式匹配 id 列来合并 2 个数据帧
dfmain =
id name val res
1 1 a
2 2 b
3 3 c
4 4 d
5 5 e
和
dfsub =
id name val res
1 2 two true thanks
2 4 four false Sorry
得到
dfmain =
id name val res
1: 1 a
2: 2 two true thanks
3: 3 c
4: 4 four false Sorry
5: 5 e
请注意-
- 两个数据框中的列的数量和名称将保持不变
- 第二个数据帧中的 id 值始终是第一个数据帧中的子集
目前我正在使用 anti_join 函数在第一个数据帧中获取不匹配的行并将第二个数据帧加入这些行
有没有更有效的方法来做到这一点?
尝试使用 data.table 库中的 setDT,但我一次只能更新一列的值。
很抱歉,如果我缺少任何明显的解决方案,因为我是 R 新手,任何帮助都将不胜感激
【问题讨论】:
-
我认为惯用的方式是
cols <- c("name", "val", "res"); dfmain[dfsub, on=.(id), (cols) := mget(paste0("i.", cols))]。这很可能是一个骗局。例如,stackoverflow.com/questions/15005666/…
标签: r dataframe dplyr data.table