【问题标题】:Performing a one to many join in R dplyr在 R dplyr 中执行一对多连接
【发布时间】:2021-12-27 17:31:14
【问题描述】:

如何使用dplyr 在没有任何键的情况下进行一对多连接? 我有两张桌子:

origin<-tribble(~"o",
     1,2)

destination<-tribble(~"d",
     5,
     6,
     7)

我想在没有任何键的情况下合并它们,如下所示:

od<- tribble(~"o",~"d",
        1,5,
        1,6,
        1,7,
        2,5,
        2,6,
        2,7)

谁能帮我解决这个问题?

【问题讨论】:

    标签: join dplyr


    【解决方案1】:

    您可以使用slicerep 根据destination 的长度重复origin 中的行。然后,在bind_cols内部,我们可以创建一个列表,并根据origin的长度重复destination中的值;然后,将它们绑定在一起。

    library(tidyverse)
    
    origin %>%
      slice(rep(1:n(), each = nrow(destination[, 1]))) %>%
      bind_cols(., d = unlist(rep(
        c(destination[, 1]), times = nrow(origin)
      )))
    

    输出

    # A tibble: 6 × 2
          o     d
      <dbl> <dbl>
    1     1     5
    2     1     6
    3     1     7
    4     2     5
    5     2     6
    6     2     7
    

    【讨论】:

      【解决方案2】:

      tidyr::crossingexpand_grid 可以为您提供两个数据帧的交叉连接。

      tidyr::crossing(origin, destination)
      #tidyr::expand_grid(origin, destination)
      
      #     o     d
      #  <dbl> <dbl>
      #1     1     5
      #2     1     6
      #3     1     7
      #4     2     5
      #5     2     6
      #6     2     7
      

      【讨论】:

        猜你喜欢
        • 2015-11-11
        • 2023-04-03
        • 2017-02-19
        • 1970-01-01
        • 1970-01-01
        • 2019-03-09
        • 2021-04-22
        • 1970-01-01
        • 2018-07-01
        相关资源
        最近更新 更多