【问题标题】:Can dplyr automatically generate a column with merge results after join operations?dplyr 可以在 join 操作后自动生成带有合并结果的列吗?
【发布时间】:2021-03-16 20:11:00
【问题描述】:

这似乎是一个有点基本的问题,但在查看文档并搜索互联网后,我找不到答案。

我的问题是:R 的dplyr 是否包含一个参数以在加入两个数据框后自动生成具有合并结果的列?对于连接操作,我的意思是 left_joinright_joinfull_join

我正在考虑类似于_merge 列的东西,您可以在使用merge 时使用参数indicator = True 在Python 的pandas 上生成,或者使用默认生成的Stata 的_merge 变量使用merge 命令。

例如:

df1 <- data.frame(id = c(1,2), value1 =  c(1,1))
df2 <- data.frame(id = c(1,3), value2 =  c(2,1))
result <- df1 %>% full_join(df2, by = 'id', merge_results_option = TRUE)
# Notice that merge_results_option is the argument I'm looking for with this question, if it exists

应该让步:

|--------------|---------------|--------------|--------------|
|      id      |     value1    |    value2    |    _merge    |
|--------------|---------------|--------------|--------------|
|       1      |       1       |       2      |   both       |
|       2      |       1       |       NA     |   left       |
|       3      |       NA      |       1      |   right      |
|--------------|---------------|--------------|--------------|

【问题讨论】:

  • 如果你给出一个简短的可重复的例子,这个问题会更清楚。您能否展示 2 个示例输入数据帧,每帧 3 行以及您想要的结果?
  • 谢谢,现在更新了

标签: r dplyr merge


【解决方案1】:

这或多或少是由tidylog package 实现的。它会打印一条总结匹配数的消息,但会添加一个标识每一行的列。

你可以阅读dplyr Feature request here上的讨论,这导致了tidylog的发展,以

鉴于tidylog 已经如此出色地解决了这个问题,我不再认为这需要在dplyr

尽管一些用户仍然对缺少列添加功能感到不满。令人惊讶的是,我在tidylog issues 中没有看到该功能请求,所以也许你可以在那里添加它。

【讨论】:

    【解决方案2】:

    如前所述,我认为这不是 dplyr 的功能。有趣的是,在连接很常见的 SQL 中也没有使用它。但是,可以使用 mutate 重新创建该列:

    df1 <- data.frame(id = c(1,2), value1 =  c(1,1))
    df2 <- data.frame(id = c(1,3), value2 =  c(2,1))
    
    
    result <- df1 %>% 
      left_join(df2, by = 'id') %>% 
      mutate(merge = case_when(!is.na(value1) & !is.na(value2) ~ "both",
                           !is.na(value1) & is.na(value2) ~ "left",
                           is.na(value1) & !is.na(value2) ~ "right",
                           TRUE ~ "missing"
                           ))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-15
      • 1970-01-01
      • 2023-03-31
      • 1970-01-01
      • 2012-08-31
      • 1970-01-01
      相关资源
      最近更新 更多