当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


R dplyr cross_join 交叉连接


交叉联接将 x 中的每一行与 y 中的每一行进行匹配,从而生成具有 nrow(x) * nrow(y) 行的数据帧。

由于交叉联接会导致 xy 之间的所有可能匹配,因此从技术上讲,它们是所有 mutating joins 的基础,通常可以将其视为交叉联接后跟过滤器。在实践中,使用更专门的过程来获得更好的性能。

用法

cross_join(x, y, ..., copy = FALSE, suffix = c(".x", ".y"))

参数

x, y

一对数据帧、数据帧扩展(例如 tibble)或惰性数据帧(例如来自 dbplyr 或 dtplyr)。有关更多详细信息,请参阅下面的方法。

...

传递给方法的其他参数。

copy

如果 xy 不是来自同一个数据源,并且 copyTRUE ,则 y 将被复制到与 x 相同的源中。这允许您跨 src 连接表,但这是一项潜在昂贵的操作,因此您必须选择它。

suffix

如果 xy 中存在未连接的重复变量,这些后缀将添加到输出中以消除它们的歧义。应该是长度为 2 的字符向量。

x相同类型的对象(包括相同的组)。输出具有以下属性:

  • 返回了 nrow(x) * nrow(y) 行。

  • 输出列包括 xy 中的所有列。使用 suffix 解决列名冲突。

  • 尽可能保留x 的行和列的顺序。

方法

该函数是泛型函数,这意味着包可以为其他类提供实现(方法)。有关额外参数和行为差异,请参阅各个方法的文档。

加载的包中当前提供以下方法: dbplyr ( tbl_lazy )、dplyr ( data.frame ) 。

也可以看看

其他连接:filter-joinsmutate-joinsnest_join()

例子

# Cross joins match each row in `x` to every row in `y`.
# Data within the columns is not used in the matching process.
cross_join(band_instruments, band_members)
#> # A tibble: 9 × 4
#>   name.x plays  name.y band   
#>   <chr>  <chr>  <chr>  <chr>  
#> 1 John   guitar Mick   Stones 
#> 2 John   guitar John   Beatles
#> 3 John   guitar Paul   Beatles
#> 4 Paul   bass   Mick   Stones 
#> 5 Paul   bass   John   Beatles
#> 6 Paul   bass   Paul   Beatles
#> 7 Keith  guitar Mick   Stones 
#> 8 Keith  guitar John   Beatles
#> 9 Keith  guitar Paul   Beatles

# Control the suffix added to variables duplicated in
# `x` and `y` with `suffix`.
cross_join(band_instruments, band_members, suffix = c("", "_y"))
#> # A tibble: 9 × 4
#>   name  plays  name_y band   
#>   <chr> <chr>  <chr>  <chr>  
#> 1 John  guitar Mick   Stones 
#> 2 John  guitar John   Beatles
#> 3 John  guitar Paul   Beatles
#> 4 Paul  bass   Mick   Stones 
#> 5 Paul  bass   John   Beatles
#> 6 Paul  bass   Paul   Beatles
#> 7 Keith guitar Mick   Stones 
#> 8 Keith guitar John   Beatles
#> 9 Keith guitar Paul   Beatles
源代码:R/join-cross.R

相关用法


注:本文由纯净天空筛选整理自Hadley Wickham等大神的英文原创作品 Cross join。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。