加入/合并R

时间:2018-01-20 10:54:49

标签: r join

我想加入类似的数据框:

input:
x <- data_frame(a=c(1,2,3,4),b=c(4,5,6,7),c=c(1,NA,NA,NA))
y <- data_frame(a=c(2,3),b=c(5,6),c=c(1,2))

desired output:
z <- data_frame(a=c(1,2,3,4),b=c(4,5,6,7),c=c(1,1,2,NA))

我试过

x <- data_frame(a=c(1,2,3,4),b=c(4,5,6,7),c=c(1,NA,NA,NA))
y <- data_frame(a=c(2,3),b=c(5,6),c=c(1,2))

z <- merge(x,y, all=TRUE)

但它有一个不便之处:

  a b  c
1 1 4  1
2 2 5  1
3 2 5 NA
4 3 6  2
5 3 6 NA
6 4 7 NA

它将有相似之处的行加倍。有没有办法在不删除不需要的行的情况下获得所需的输出?

修改

我无法删除NA的行,x数据框由NA不包含在y数据帧中的行组成。如果我这样做,我会从x数据框(4 7 NA)

中删除第4行

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

您可以使用data.table包的更新联接:

# load the packge and convert the dataframes to data.table's
library(data.table)
setDT(x)
setDT(y)

# update join
x[y, on = .(a, b), c := i.c][]

给出:

   a b  c
1: 1 4  1
2: 2 5  1
3: 3 6  2
4: 4 7 NA