通过在 r 中保留某些列值来合并两个数据帧

Posted

技术标签:

【中文标题】通过在 r 中保留某些列值来合并两个数据帧【英文标题】:Merging two dataframes by keeping certain column values in r 【发布时间】:2022-01-19 23:04:42 【问题描述】:

我有两个需要合并的数据框。第二个缺少某些列,并且还有更多ids。以下是示例数据集的外观。

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.acat.b 信息。然后我还想保留id=7id=8 缺少cat.acat.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 中保留某些列值来合并两个数据帧的主要内容,如果未能解决你的问题,请参考以下文章

将 R 中的数据帧连接/合并为向量类型单元格

R语言 数据重塑

r - 合并数据帧时保留索引

合并两个具有聚合列值的数据框作为结果

在R中添加2个数据帧而不会丢失列

如果一个列字符串包含在另一个与 Python 中,则一对多合并两个数据帧