R Merge - 左连接但显示所有变量

时间:2017-04-22 12:08:01

标签: r dataframe merge

我有2个数据框,如下所示。

DF_1 <- data.frame(ID_1 = c("A","1","2","3","B","1","2","3","C","1","2","3"))
DF_2 <- data.frame(ID_2 = c("A","B","C"))

我需要创建另一个数据框,如下所示。

   ID_1 ID_2
1     A    A
2     1 <NA>
3     2 <NA>
4     3 <NA>
5     B    B
6     1 <NA>
7     2 <NA>
8     3 <NA>
9     C    C
10    1 <NA>
11    2 <NA>
12    3 <NA>

我目前正在使用它来实现结果。但是,我想尽可能远离sql。

library(sqldf)
RESULT <- sqldf('select aa.ID_1, bb.ID_2
                from DF_1 aa left join DF_2 bb 
                on aa.ID_1 = bb.ID_2')

我也尝试过使用merge。

RESULT <- merge(DF_1, DF_2, by.x = "ID_1", by.y = "ID_2", all.x = TRUE)

但是,我在下面找到了ID_2

      ID_1
1     1
2     1
3     1
4     2
5     2
6     2
7     3
8     3
9     3
10    A
11    B
12    C

2 个答案:

答案 0 :(得分:2)

这是因为DF_2只有一列,所以要合并的列。你可以这样做

merge(DF_1, cbind(DF_2, DF_2$ID_2), by.x = "ID_1", by.y = "ID_2", all.x = TRUE)

   # ID_1 DF_2$ID_2
# 1     1      <NA>
# 2     1      <NA>
# 3     1      <NA>
# 4     2      <NA>
# 5     2      <NA>
# 6     2      <NA>
# 7     3      <NA>
# 8     3      <NA>
# 9     3      <NA>
# 10    A         A
# 11    B         B
# 12    C         C

答案 1 :(得分:0)

我们可以使用match

DF_1$ID_2 <- DF_2$ID_2[match(DF_1$ID_1, DF_2$ID_2)]
DF_1
#   ID_1 ID_2
#1     A    A
#2     1 <NA>
#3     2 <NA>
#4     3 <NA>
#5     B    B
#6     1 <NA>
#7     2 <NA>
#8     3 <NA>
#9     C    C
#10    1 <NA>
#11    2 <NA>
#12    3 <NA>
相关问题