繁体   English   中英

使用 merge() function 左连接 R 中的选定列

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM