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