假设我有两个数据框,如下所示:
df1 = data.frame(ssuid=c(916860000285, 916860000285, 916925451999, 404454000285, 404454000285),
epppnum=c(101,102,101,101,102),
esex=c("M","F","M","M","F"))
df2 = data.frame(ssuid=c(916860000285, 916860000285, 916925451999, 404454000285, 404454000285),
epppnum=c(101,102,101,101,102),
erace=c(1,1,2,1,1))
我想合并它们,但唯一的ID是ssuid和epppnum的组合。我现在的解决方案是创建一个新变量,然后使用它来合并。
library(dplyr)
df1 = df1 %>% mutate(uniqueID=paste(ssuid,epppnum,sep="/")) %>%
select(uniqueID, esex)
df2 = df2 %>% mutate(uniqueID=paste(ssuid,epppnum,sep="/"))%>%
select(uniqueID, erace)
df = left_join(df1,df2,by="uniqueID")
有更好的方法吗?
谢谢!
答案 0 :(得分:4)
默认情况下,left_join
会选择所有常见变量:
left_join(df1,df2)
Joining by: c("ssuid", "epppnum")
ssuid epppnum esex erace
1 916860000285 101 M 1
2 916860000285 102 F 1
3 916925451999 101 M 2
4 404454000285 101 M 1
5 404454000285 102 F 1
正如您在上面的消息中所看到的,要指定组合,请使用c
将它们组合起来,即by = c("ssuid", "epppnum")
。
答案 1 :(得分:2)
您可以在不连接密钥的情况下使用data.table
,可以通过setkey
提及密钥来完成加入:
library(data.table)
setDT(df1)
setkey(df1, ssuid, epppnum)[setDT(df2)]
# ssuid epppnum esex erace
#1: 916860000285 101 M 1
#2: 916860000285 102 F 1
#3: 916925451999 101 M 2
#4: 404454000285 101 M 1
#5: 404454000285 102 F 1