嵌套連接使 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()
將使用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 連接表,但這是一項潛在昂貴的操作,因此您必須選擇它。 - keep
-
新的列表列是否應該包含連接鍵?默認情況下將保留不等式連接的連接鍵。
- name
-
由連接創建的列表列的名稱。如果
NULL
(默認值),則使用y
的名稱。 - ...
-
傳遞給方法的其他參數。
- na_matches
-
兩個
NA
或兩個NaN
值應該匹配嗎? - unmatched
-
應如何處理會導致刪除行的不匹配鍵?
-
"drop"
從結果中刪除不匹配的鍵。 -
如果檢測到不匹配的鍵,
"error"
會引發錯誤。
unmatched
旨在防止您在連接期間意外刪除行。它僅檢查輸入中可能會刪除行的不匹配鍵。-
對於左連接,它檢查
y
。 -
對於右連接,它檢查
x
。 -
對於內部聯接,它檢查
x
和y
。在這種情況下,unmatched
也可以是長度為 2 的字符向量,以獨立指定x
和y
的行為。
-
值
輸出:
-
與
x
類型相同(包括具有相同的組)。 -
與
x
具有完全相同的行數。 -
包含
x
的所有列,順序相同且值相同。僅當keep = FALSE
時,它們才會被(輕微)修改,此時by
中列出的列將被強製為x
和y
中的通用類型。 -
在最右側獲得一個名為
{name}
的新列,這是一個包含與y
類型相同的數據幀的列表列。
與其他連接的關係
您可以根據嵌套連接的結果重新創建許多其他連接:
-
inner_join()
是nest_join()
加上tidyr::unnest()
。 -
left_join()
是nest_join()
加上tidyr::unnest(keep_empty = TRUE)
。 -
semi_join()
是nest_join()
加上filter()
,您可以在其中檢查數據的每個元素是否至少有一行。 -
anti_join()
是nest_join()
加上filter()
,您可以在其中檢查每個元素是否有零行。
也可以看看
其他連接:cross_join()
、filter-joins
、mutate-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 dplyr nest_by 由一個或多個變量嵌套
- R dplyr near 比較兩個數值向量
- R dplyr nth 從向量中提取第一個、最後一個或第 n 個值
- R dplyr n_distinct 計算獨特的組合
- R dplyr na_if 將值轉換為 NA
- R dplyr ntile 將數值向量分為 n 組
- 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 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 任何、全部和平均值的累積版本
注:本文由純淨天空篩選整理自Hadley Wickham等大神的英文原創作品 Nest join。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。