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

Merging two dataframes by keeping certain column values in r

我有两个数据框需要合并。第二个缺少某些列,并且还有一些 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>

有什么想法吗?

谢谢!

我们可以用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>