DF1是
No ID
2 5678
3 3241
5 8167
DF2
NO Name meaning
1 a aaple
2 b bat
3 c cat
4 d dam
5 e egg
我想将DF1和DF2组合到DF3(这包含DF1和DF2的所有列)
预期输出DF3
No Name meaning ID
1 a aaple
2 b bat 5678
3 c cat 3241
4 d dam
5 e egg 8167
我尝试使用cbind,但是R发出错误'处理失败。脚本异常终止'
然后我使用了' merge'功能,但结果是
No Name meaning ID
2 b bat 5678
3 c cat 3241
5 e egg 8167
如果我使用功能
,请告诉我答案 0 :(得分:4)
如果要保留所有记录,则需要将all
参数指定为TRUE。查看?merge
,默认情况下,all, all.x
和all.y
设置为FALSE,它是内部联接:
merge(df1, df2, by = "No", all = T)
# No ID Name meaning
# 1 1 NA a aaple
# 2 2 5678 b bat
# 3 3 3241 c cat
# 4 4 NA d dam
# 5 5 8167 e egg
答案 1 :(得分:3)
您可以使用此命令
df3 <- merge(x = df1, y = df2, by = "No", all = TRUE)
或者如果你在更大的数据集上运行,dplyrs inner_join()函数要快得多
library(dplyr)
df3 <- inner_join(df2,df1,by = "no")
答案 2 :(得分:1)
我们可以使用match
中的base R
来执行此操作,它应该非常有效
DF3 <- DF2
DF3$ID <- DF1$ID[match(DF2$NO, DF1$No)]
DF3
# NO Name meaning ID
#1 1 a aaple NA
#2 2 b bat 5678
#3 3 c cat 3241
#4 4 d dam NA
#5 5 e egg 8167
或者我们可以使用来自on
data.table
加入
library(data.table)
setDT(DF1)[DF2, on = c("No" = "NO")]
# No ID Name meaning
#1: 1 NA a aaple
#2: 2 5678 b bat
#3: 3 3241 c cat
#4: 4 NA d dam
#5: 5 8167 e egg