4 回答

TA貢獻1780條經驗 獲得超4個贊
內連接有data.table方法,這非常節省時間和內存(對于一些較大的data.frames是必需的):
library(data.table)
dt1 <- data.table(df1, key = "CustomerId")
dt2 <- data.table(df2, key = "CustomerId")
joined.dt1.dt.2 <- dt1[dt2]
merge也適用于data.tables(因為它是通用的和調用merge.data.table)
merge(dt1, dt2)
stackoverflow上記錄的data.table:
如何進行data.table合并操作
將外鍵上的SQL連接轉換為R data.table語法
為更大的data.frames合并的有效替代方案R
如何使用data.table進行基本的左外連接在R?
另一種選擇是join
在plyr包中找到的功能
library(plyr)
join(df1, df2,
type = "inner")
# CustomerId Product State
# 1 2 Toaster Alabama
# 2 4 Radio Alabama
# 3 6 Radio Ohio
為選項type:inner,left,right,full。
From ?join:與merge[ join] 不同,[ ]無論使用何種連接類型,都會保留x的順序。

TA貢獻1865條經驗 獲得超7個贊
你也可以使用Hadley Wickham令人敬畏的dplyr軟件包進行連接。
library(dplyr)
#make sure that CustomerId cols are both type numeric
#they ARE not using the provided code in question and dplyr will complain
df1$CustomerId <- as.numeric(df1$CustomerId)
df2$CustomerId <- as.numeric(df2$CustomerId)
變異連接:使用df2中的匹配將列添加到df1
#inner
inner_join(df1, df2)
#left outer
left_join(df1, df2)
#right outer
right_join(df1, df2)
#alternate right outer
left_join(df2, df1)
#full join
full_join(df1, df2)
過濾聯接:過濾掉df1中的行,不要修改列
semi_join(df1, df2) #keep only observations in df1 that match in df2.
anti_join(df1, df2) #drops all observations in df1 that match in df2.
- 4 回答
- 0 關注
- 1062 瀏覽
添加回答
舉報