使用 merge() 函数仅左连接 R 中的选定列

Posted

技术标签:

【中文标题】使用 merge() 函数仅左连接 R 中的选定列【英文标题】:Left join only selected columns in R with the merge() function 【发布时间】:2014-08-03 04:44:03 【问题描述】:

我正在尝试左加入 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

我可以使用以下代码离开加入:

合并(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      

【问题讨论】:

您需要在DF1中将“Cl”重命名为“Client”(在上面的书面示例中)。否则合并功能不起作用。 【参考方案1】:

您可以通过子集传递到合并中的数据来做到这一点:

merge(x = DF1, y = DF2[ , c("Client", "LO")], by = "Client", all.x=TRUE)

或者您可以在当前合并后简单地删除该列:)

【讨论】:

记住您需要包含要合并的变量【参考方案2】:

我认为使用 dplyr 函数 selectleft_join 会简单一些;至少我更容易理解。 dplyr 中的连接函数用于模拟 sql 参数。

 library(tidyverse)

 DF2 <- DF2 %>%
   select(client, LO)

 joined_data <- left_join(DF1, DF2, by = "Client")

在这种情况下,您实际上不需要使用“by”参数,因为列具有相同的名称。

【讨论】:

%&lt;% 还是%&gt;% 是的,这是一个错字。我刚刚修好了。【参考方案3】:

没有什么优雅的,但这可能是另一个令人满意的答案。

merge(x = DF1, y = DF2, by = "Client", all.x=TRUE)[,c("Client","LO","CON")]

这将非常有用,尤其是当您不需要用于在结果中连接表的键时。

【讨论】:

【参考方案4】:

使用dplyr 包中的left_join()select() 的替代解决方案,无需中间步骤:

DF1 <- DF1 %>%
  left_join(DF2, by = "Client") %>%
  select(-CON)

【讨论】:

以上是关于使用 merge() 函数仅左连接 R 中的选定列的主要内容,如果未能解决你的问题,请参考以下文章

R语言merge函数连接多个dataframe数据集迭代内连接dataframe数据( iteratively merge data frames in R)默认merge函数通过公共列名合并数据

r语言 merge函数by.x啥意思

R语言merge函数左连接dataframe数据(Left (outer) join in R)左连接必须将参数all设置(all.x = TRUE)默认merge函数通过公共列名合并数据集

R语言merge函数使用数据行名称内连接dataframe数据使用数据行名称连接dataframe数据设置by=0或者row.names,all=TRUE使用rownames函数为数据行命名

R语言merge函数交叉连接dataframe数据(Cross joinCartesian join笛卡尔交叉连接)merge函数进行交叉连接必须将参数by设置为NULL(by = NULL)

使用R [重复]进行数据集成