我有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
答案 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>