过滤连接根据 y
中是否存在匹配来过滤 x
中的行:
-
semi_join()
返回x
中与y
匹配的所有行。 -
anti_join()
返回x
中没有与y
匹配的所有行。
用法
semi_join(x, y, by = NULL, copy = FALSE, ...)
# S3 method for data.frame
semi_join(x, y, by = NULL, copy = FALSE, ..., na_matches = c("na", "never"))
anti_join(x, y, by = NULL, copy = FALSE, ...)
# S3 method for data.frame
anti_join(x, y, by = NULL, copy = FALSE, ..., na_matches = c("na", "never"))
参数
- x, y
-
一对数据帧、数据帧扩展(例如 tibble)或惰性数据帧(例如来自 dbplyr 或 dtplyr)。有关更多详细信息,请参阅下面的方法。
- 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 连接表,但这是一项潜在昂贵的操作,因此您必须选择它。 - ...
-
传递给方法的其他参数。
- na_matches
-
两个
NA
或两个NaN
值应该匹配吗?
也可以看看
其他连接:cross_join()
、mutate-joins
、nest_join()
例子
# "Filtering" joins keep cases from the LHS
band_members %>% semi_join(band_instruments)
#> Joining with `by = join_by(name)`
#> # A tibble: 2 × 2
#> name band
#> <chr> <chr>
#> 1 John Beatles
#> 2 Paul Beatles
band_members %>% anti_join(band_instruments)
#> Joining with `by = join_by(name)`
#> # A tibble: 1 × 2
#> name band
#> <chr> <chr>
#> 1 Mick Stones
# To suppress the message about joining variables, supply `by`
band_members %>% semi_join(band_instruments, by = join_by(name))
#> # A tibble: 2 × 2
#> name band
#> <chr> <chr>
#> 1 John Beatles
#> 2 Paul Beatles
# This is good practice in production code
相关用法
- R dplyr filter 保留符合条件的行
- R dplyr filter_all 在选择的变量中进行过滤
- R dplyr group_trim 修剪分组结构
- R dplyr slice 使用行的位置对行进行子集化
- R dplyr copy_to 将本地数据帧复制到远程src
- R dplyr sample_n 从表中采样 n 行
- R dplyr consecutive_id 为连续组合生成唯一标识符
- R dplyr row_number 整数排名函数
- R dplyr band_members 乐队成员
- R dplyr mutate-joins 变异连接
- R dplyr nth 从向量中提取第一个、最后一个或第 n 个值
- R dplyr coalesce 找到第一个非缺失元素
- R dplyr group_split 按组分割 DataFrame
- R dplyr mutate 创建、修改和删除列
- R dplyr order_by 用于排序窗口函数输出的辅助函数
- R dplyr context 有关“当前”组或变量的信息
- R dplyr percent_rank 比例排名函数
- R dplyr recode 重新编码值
- R dplyr starwars 星球大战人物
- R dplyr desc 降序
- R dplyr between 检测值落在指定范围内的位置
- R dplyr cumall 任何、全部和平均值的累积版本
- R dplyr group_map 对每个组应用一个函数
- R dplyr do 做任何事情
- R dplyr nest_join 嵌套连接
注:本文由纯净天空筛选整理自Hadley Wickham等大神的英文原创作品 Filtering joins。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。