[英]merge/join two data frames using more than one “by”?
假設我有兩個數據幀,如下所示:
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")
有沒有更好的辦法?
謝謝!
默認情況下, 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")
您可以使用data.table
而不使用鍵,通過使用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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.