跨多个列组合两个数据帧

时间:2017-05-09 19:43:42

标签: r

假设我有两个数据帧,每个数据帧有四列。一列是数值。其他三个是识别变量。例如:

set1 <- data.frame(label1 = c("a","b", "c"), label2 = c("red", "white", "blue"), name = c("sam", "bob", "drew"), val = c(1, 10, 100))
set2 <- data.frame(label1 = c("b","c", "d"), label2 = c("white", "green", "orange"),  name = c("bob", "drew", "collin"), val = c(7, 100, 15))

这是:

> set1
  label1 label2 name val
1      a    red  sam   1
2      b  white  bob  10
3      c   blue drew  50
> set2
  label1 label2   name val
1      b  white    bob   7
2      c  green   drew 100
3      d orange collin  15

可以组合前三列以形成主键。结合这两个数据框的最有效方法是什么,以便显示所有唯一值(来自label1label2name列)以及两个val列:

set3 <- data.frame(label = c("a", "b", "c", "c", "d"), label2 = c("red", "white", "blue", "green", "orange"), name = c("sam", "bob", "drew", "drew", "collin"), val.set1 = c(1, 10, 50, NA, NA), val.set2 = c(NA, 7, NA, 100, 15))
> set3
  label label2   name val.set1 val.set2
1     a    red    sam        1       NA
2     b  white    bob       10        7
3     c   blue   drew       50       NA
4     c  green   drew       NA      100
5     d orange collin       NA       15
> 

2 个答案:

答案 0 :(得分:0)

由于它们采用相同的格式,您可以将它们拼接在一起,然后只获取唯一值。使用dplyr:

records

你只是想确保你没有因素,一切都是字符或数字。

答案 1 :(得分:0)

在考虑效率时,您应该评估data.table包:

library(data.table)
(merge(
  setDT(set1, key=names(set1)[1:3]), 
  setDT(set2, key=names(set2)[1:3]),
  all=T,
  suffixes=paste0(".set",1:2)
) -> set3)
#    label1 label2   name val.set1 val.set2
# 1:      a    red    sam        1       NA
# 2:      b  white    bob       10        7
# 3:      c   blue   drew      100       NA
# 4:      c  green   drew       NA      100
# 5:      d orange collin       NA       15