我试图LEFT加入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
答案 0 :(得分:81)
您可以通过将传递给合并的数据进行子集化来完成此操作:
merge(x = DF1, y = DF2[ , c("Client", "LO")], by = "Client", all.x=TRUE)
或者您可以在当前合并后删除该列:)
答案 1 :(得分:2)
我认为使用dplyr
函数select
和left_join
稍微简单一些;至少它让我更容易理解。来自dplyr
的连接函数用于模仿sql参数。
library(tidyverse)
DF2 <- DF2 %<%
select(client, LO)
joined_data <- left_join(DF1, DF2, by = "Client")
您实际上并不需要使用&#34; by&#34;在这种情况下的参数,因为列具有相同的名称。
答案 2 :(得分:2)
没有什么优雅的,但这可能是另一个令人满意的答案。
merge(x = DF1, y = DF2, by = "Client", all.x=TRUE)[,c("Client","LO","CON")]
这将非常有用,特别是当您不需要在结果中用于联接表的键时。
答案 3 :(得分:0)
使用 left_join()
包中的 select()
和 dplyr
的替代解决方案,无需中间步骤:
DF1 <- DF1 %>%
left_join(DF2, by = "Client") %>%
select(-CON)