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


R dplyr nest_join 嵌套连接


嵌套连接使 x 几乎保持不变,只是它添加了一个新的列表列,其中每个元素包含 y 中与 x 中相应行匹配的行。

用法

nest_join(x, y, by = NULL, copy = FALSE, keep = NULL, name = NULL, ...)

# S3 method for data.frame
nest_join(
  x,
  y,
  by = NULL,
  copy = FALSE,
  keep = NULL,
  name = NULL,
  ...,
  na_matches = c("na", "never"),
  unmatched = "drop"
)

参数

x, y

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

by

使用 join_by() 创建的连接规范,或要连接的变量的字符向量。

如果 NULL (默认值),*_join() 将使用 xy 之间的所有共同变量执行自然连接。一条消息列出了变量,以便您可以检查它们是否正确;通过显式提供 by 来抑制该消息。

要连接 xy 之间的不同变量,请使用 join_by() 规范。例如, join_by(a == b) 将匹配 x$ay$b

要连接多个变量,请使用带有多个表达式的 join_by() 规范。例如, join_by(a == b, c == d)x$ay$b 匹配,将 x$cy$d 匹配。如果 xy 之间的列名称相同,您可以通过仅列出变量名称来缩短列名称,例如 join_by(a, c)

join_by() 还可用于执行不等式连接、滚动连接和重叠连接。有关这些类型的连接的详细信息,请参阅?join_by 中的文档。

对于简单的等式连接,您也可以指定要连接的变量名称的字符向量。例如, by = c("a", "b")x$a 连接到 y$a 并将 x$b 连接到 y$b 。如果 xy 之间的变量名称不同,请使用命名字符向量,例如 by = c("x_a" = "y_a", "x_b" = "y_b")

要执行交叉联接,生成 xy 的所有组合,请参阅 cross_join()

copy

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

keep

新的列表列是否应该包含连接键?默认情况下将保留不等式连接的连接键。

name

由连接创建的列表列的名称。如果 NULL (默认值),则使用 y 的名称。

...

传递给方法的其他参数。

na_matches

两个 NA 或两个 NaN 值应该匹配吗?

  • "na" (默认值)将两个 NA 或两个 NaN 值视为相等,例如 %in%match()merge()

  • "never" 将两个 NA 或两个 NaN 值视为不同的值,并且永远不会将它们匹配在一起或与任何其他值匹配。这类似于数据库源的联接和 base::merge(incomparables = NA)

unmatched

应如何处理会导致删除行的不匹配键?

  • "drop" 从结果中删除不匹配的键。

  • 如果检测到不匹配的键,"error" 会引发错误。

unmatched 旨在防止您在连接期间意外删除行。它仅检查输入中可能会删除行的不匹配键。

  • 对于左连接,它检查 y

  • 对于右连接,它检查 x

  • 对于内部联接,它检查 xy 。在这种情况下,unmatched 也可以是长度为 2 的字符向量,以独立指定 xy 的行为。

输出:

  • x 类型相同(包括具有相同的组)。

  • x 具有完全相同的行数。

  • 包含 x 的所有列,顺序相同且值相同。仅当 keep = FALSE 时,它们才会被(轻微)修改,此时 by 中列出的列将被强制为 xy 中的通用类型。

  • 在最右侧获得一个名为 {name} 的新列,这是一个包含与 y 类型相同的数据帧的列表列。

与其他连接的关系

您可以根据嵌套连接的结果重新创建许多其他连接:

方法

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

当前在加载的包中可以使用以下方法: dplyr ( data.frame ) 。

也可以看看

其他连接:cross_join()filter-joinsmutate-joins

例子

df1 <- tibble(x = 1:3)
df2 <- tibble(x = c(2, 3, 3), y = c("a", "b", "c"))

out <- nest_join(df1, df2)
#> Joining with `by = join_by(x)`
out
#> # A tibble: 3 × 2
#>       x df2             
#>   <dbl> <list>          
#> 1     1 <tibble [0 × 1]>
#> 2     2 <tibble [1 × 1]>
#> 3     3 <tibble [2 × 1]>
out$df2
#> [[1]]
#> # A tibble: 0 × 1
#> # ℹ 1 variable: y <chr>
#> 
#> [[2]]
#> # A tibble: 1 × 1
#>   y    
#>   <chr>
#> 1 a    
#> 
#> [[3]]
#> # A tibble: 2 × 1
#>   y    
#>   <chr>
#> 1 b    
#> 2 c    
#> 
源代码:R/join.R

相关用法


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