當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。