通过在 r 中保留某些列值来合并两个数据帧
Posted
技术标签:
【中文标题】通过在 r 中保留某些列值来合并两个数据帧【英文标题】:Merging two dataframes by keeping certain column values in r 【发布时间】:2022-01-19 23:04:42 【问题描述】:我有两个需要合并的数据框。第二个缺少某些列,并且还有更多id
s。以下是示例数据集的外观。
df1 <- data.frame(id = c(1,2,3,4,5,6),
item = c(11,22,33,44,55,66),
score = c(1,0,1,1,1,0),
cat.a = c("A","B","C","D","E","F"),
cat.b = c("a","a","b","b","c","f"))
> df1
id item score cat.a cat.b
1 1 11 1 A a
2 2 22 0 B a
3 3 33 1 C b
4 4 44 1 D b
5 5 55 1 E c
6 6 66 0 F f
df2 <- data.frame(id = c(1,2,3,4,5,6,7,8),
item = c(11,22,33,44,55,66,77,88),
score = c(1,0,1,1,1,0,1,1),
cat.a = c(NA,NA,NA,NA,NA,NA,NA,NA),
cat.b = c(NA,NA,NA,NA,NA,NA,NA,NA))
> df2
id item score cat.a cat.b
1 1 11 1 NA NA
2 2 22 0 NA NA
3 3 33 1 NA NA
4 4 44 1 NA NA
5 5 55 1 NA NA
6 6 66 0 NA NA
7 7 77 1 NA NA
8 8 88 1 NA NA
两个数据集共享前 6 行,数据集 2 有另外两行。当我合并时,我需要保留第一个数据帧中的 cat.a
和 cat.b
信息。然后我还想保留id=7
和id=8
缺少cat.a
和cat.b
列。
这是我想要的输出。
> df3
id item score cat.a cat.b
1 1 11 1 A a
2 2 22 0 B a
3 3 33 1 C b
4 4 44 1 D b
5 5 55 1 E c
6 6 66 0 F f
7 7 77 1 <NA> <NA>
8 8 88 1 <NA> <NA>
有什么想法吗?
谢谢!
【问题讨论】:
【参考方案1】:我们可能会使用rows_update
library(dplyr)
rows_update(df2, df1, by = c("id", "item", "score"))
-输出
id item score cat.a cat.b
1 1 11 1 A a
2 2 22 0 B a
3 3 33 1 C b
4 4 44 1 D b
5 5 55 1 E c
6 6 66 0 F f
7 7 77 1 <NA> <NA>
8 8 88 1 <NA> <NA>
【讨论】:
从来不知道我们有类似于 sql 的插入、更新和删除!这真太了不起了。谢谢以上是关于通过在 r 中保留某些列值来合并两个数据帧的主要内容,如果未能解决你的问题,请参考以下文章