簡體   English   中英

使用多個“ by”合並/合並兩個數據幀?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM