[英]Left join only selected columns in R with the merge() function
我正在嘗試 LEFT Join 2 數據框,但我不想加入第二個數據集中的所有變量:
例如,我有數據集 1 (DF1):
Cl Q Sales Date
A 2 30 01/01/2014
A 3 24 02/01/2014
A 1 10 03/01/2014
B 4 10 01/01/2014
B 1 20 02/01/2014
B 3 30 03/01/2014
我想離開加入數據集 2 (DF2):
Client LO CON
A 12 CA
B 11 US
C 12 UK
D 10 CA
E 15 AUS
F 91 DD
我可以使用以下代碼加入:
merge(x = DF1, y = DF2, by = "Client", all.x=TRUE):
Client Q Sales Date LO CON
A 2 30 01/01/2014 12 CA
A 3 24 02/01/2014 12 CA
A 1 10 03/01/2014 12 CA
B 4 10 01/01/2014 11 US
B 1 20 02/01/2014 11 US
B 3 30 03/01/2014 11 US
但是,它合並了 LO 和 CON 列。 我只想合並 LO 列。
Client Q Sales Date LO
A 2 30 01/01/2014 12
A 3 24 02/01/2014 12
A 1 10 03/01/2014 12
B 4 10 01/01/2014 11
B 1 20 02/01/2014 11
B 3 30 03/01/2014 11
您可以通過對傳遞到合並中的數據進行子集化來做到這一點:
merge(x = DF1, y = DF2[ , c("Client", "LO")], by = "Client", all.x=TRUE)
或者您可以在當前合並后簡單地刪除該列:)
我認為使用dplyr
函數select
和left_join
更簡單left_join
; 至少我更容易理解。 來自dplyr
的 join 函數用於模擬 sql 參數。
library(tidyverse)
DF2 <- DF2 %>%
select(client, LO)
joined_data <- left_join(DF1, DF2, by = "Client")
在這種情況下,您實際上不需要使用“by”參數,因為列具有相同的名稱。
沒什么優雅的,但這可能是另一個令人滿意的答案。
merge(x = DF1, y = DF2, by = "Client", all.x=TRUE)[,c("Client","LO","CON")]
這將非常有用,尤其是當您不需要用於連接結果中的表的鍵時。
對於兩個表中的客戶列:
DF_joined <- DF1 %>% left_join(DF2 %>% select(Client,CON))
使用替代溶液left_join()
和select()
從dplyr
封裝,無中間步驟:
DF1 <- DF1 %>%
left_join(DF2, by = "Client") %>%
select(-CON)
帶dplyr<\/code>
DF_joined <- left_join(DF1, select(DF2, -CON), by = "Client")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.