这些是 dplyr 泛型 left_join()
、 right_join()
、 inner_join()
、 full_join()
、 anti_join()
和 semi_join()
的方法。左、右、内和反连接被转换为 [.data.table
等效的完全连接到 data.table::merge.data.table()
。在某些情况下,左连接、右连接和全连接后面会调用 data.table::setcolorder()
和 data.table::setnames()
,以确保列顺序和名称与 dplyr 约定匹配。半连接没有直接的 data.table 等效项。
用法
# S3 method for dtplyr_step
left_join(x, y, ..., by = NULL, copy = FALSE, suffix = c(".x", ".y"))
参数
- x, y
-
一对
lazy_dt()
。 - ...
-
传递给方法的其他参数。
- by
-
使用
join_by()
创建的连接规范,或要连接的变量的字符向量。如果
NULL
(默认值),*_join()
将使用x
和y
之间的所有共同变量执行自然连接。一条消息列出了变量,以便您可以检查它们是否正确;通过显式提供by
来抑制该消息。要连接
x
和y
之间的不同变量,请使用join_by()
规范。例如,join_by(a == b)
将匹配x$a
到y$b
。要连接多个变量,请使用带有多个表达式的
join_by()
规范。例如,join_by(a == b, c == d)
将x$a
与y$b
匹配,将x$c
与y$d
匹配。如果x
和y
之间的列名称相同,您可以通过仅列出变量名称来缩短列名称,例如join_by(a, c)
。join_by()
还可用于执行不等式连接、滚动连接和重叠连接。有关这些类型的连接的详细信息,请参阅?join_by 中的文档。对于简单的等式连接,您也可以指定要连接的变量名称的字符向量。例如,
by = c("a", "b")
将x$a
连接到y$a
并将x$b
连接到y$b
。如果x
和y
之间的变量名称不同,请使用命名字符向量,例如by = c("x_a" = "y_a", "x_b" = "y_b")
。要执行交叉联接,生成
x
和y
的所有组合,请参阅cross_join()
。 - copy
-
如果
x
和y
不是来自同一个数据源,并且copy
是TRUE
,则y
将被复制到与x
相同的源中。这允许您跨 src 连接表,但这是一项潜在昂贵的操作,因此您必须选择它。 - suffix
-
如果
x
和y
中存在未连接的重复变量,这些后缀将添加到输出中以消除它们的歧义。应该是长度为 2 的字符向量。
例子
library(dplyr, warn.conflicts = FALSE)
band_dt <- lazy_dt(dplyr::band_members)
instrument_dt <- lazy_dt(dplyr::band_instruments)
band_dt %>% left_join(instrument_dt)
#> Joining, by = "name"
#> Source: local data table [3 x 3]
#> Call: setcolorder(`_DT23`[`_DT22`, on = .(name), allow.cartesian = TRUE],
#> c(1L, 3L, 2L))
#>
#> name band plays
#> <chr> <chr> <chr>
#> 1 Mick Stones NA
#> 2 John Beatles guitar
#> 3 Paul Beatles bass
#>
#> # Use as.data.table()/as.data.frame()/as_tibble() to access results
band_dt %>% right_join(instrument_dt)
#> Joining, by = "name"
#> Source: local data table [3 x 3]
#> Call: `_DT22`[`_DT23`, on = .(name), allow.cartesian = TRUE]
#>
#> name band plays
#> <chr> <chr> <chr>
#> 1 John Beatles guitar
#> 2 Paul Beatles bass
#> 3 Keith NA guitar
#>
#> # Use as.data.table()/as.data.frame()/as_tibble() to access results
band_dt %>% inner_join(instrument_dt)
#> Joining, by = "name"
#> Source: local data table [2 x 3]
#> Call: `_DT22`[`_DT23`, on = .(name), nomatch = NULL, allow.cartesian = TRUE]
#>
#> name band plays
#> <chr> <chr> <chr>
#> 1 John Beatles guitar
#> 2 Paul Beatles bass
#>
#> # Use as.data.table()/as.data.frame()/as_tibble() to access results
band_dt %>% full_join(instrument_dt)
#> Joining, by = "name"
#> Source: local data table [4 x 3]
#> Call: merge(`_DT22`, `_DT23`, all = TRUE, by.x = "name", by.y = "name",
#> allow.cartesian = TRUE)
#>
#> name band plays
#> <chr> <chr> <chr>
#> 1 John Beatles guitar
#> 2 Keith NA guitar
#> 3 Mick Stones NA
#> 4 Paul Beatles bass
#>
#> # Use as.data.table()/as.data.frame()/as_tibble() to access results
band_dt %>% semi_join(instrument_dt)
#> Joining, by = "name"
#> Source: local data table [2 x 2]
#> Call: `_DT22`[unique(`_DT22`[`_DT23`, which = TRUE, nomatch = NULL,
#> on = .(name)])]
#>
#> name band
#> <chr> <chr>
#> 1 John Beatles
#> 2 Paul Beatles
#>
#> # Use as.data.table()/as.data.frame()/as_tibble() to access results
band_dt %>% anti_join(instrument_dt)
#> Joining, by = "name"
#> Source: local data table [1 x 2]
#> Call: `_DT22`[!`_DT23`, on = .(name)]
#>
#> name band
#> <chr> <chr>
#> 1 Mick Stones
#>
#> # Use as.data.table()/as.data.frame()/as_tibble() to access results
相关用法
- R dtplyr lazy_dt 创建一个“惰性”data.table 以与 dplyr 动词一起使用
- R dtplyr group_modify.dtplyr_step 对每个组应用一个函数
- R dtplyr transmute.dtplyr_step 创建新列,删除旧列
- R dtplyr slice.dtplyr_step 使用行的位置对行进行子集化
- R dtplyr fill.dtplyr_step 用上一个或下一个值填充缺失值
- R dtplyr filter.dtplyr_step 使用列值对行进行子集化
- R dtplyr mutate.dtplyr_step 创建和修改列
- R dtplyr distinct.dtplyr_step 子集不同/唯一行
- R dtplyr unite.dtplyr_step 通过将字符串粘贴在一起将多列合并为一列。
- R dtplyr nest.dtplyr_step 巢
- R dtplyr relocate.dtplyr_step 使用变量名称重新定位变量
- R dtplyr head.dtplyr_step 对第一行或最后一行进行子集化
- R dtplyr expand.dtplyr_step 扩展 DataFrame 以包含所有可能的值组合。
- R dtplyr group_by.dtplyr_step 分组和取消分组
- R dtplyr intersect.dtplyr_step 设置操作
- R dtplyr pivot_wider.dtplyr_step 将数据从长轴转向宽轴
- R dtplyr summarise.dtplyr_step 将每组汇总为一行
- R dtplyr count.dtplyr_step 按组计数观察值
- R dtplyr select.dtplyr_step 使用名称对列进行子集化
- R dtplyr drop_na.dtplyr_step 删除包含缺失值的行
- R dtplyr complete.dtplyr_step 完成缺少数据组合的 DataFrame
- R dtplyr collect.dtplyr_step 强制计算惰性 data.table
- R dtplyr arrange.dtplyr_step 按列值排列行
- R dtplyr separate.dtplyr_step 使用正则表达式或数字位置将字符列分成多列
- R dtplyr rename.dtplyr_step 使用名称重命名列
注:本文由纯净天空筛选整理自Hadley Wickham等大神的英文原创作品 Join data tables。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。