[英]How does left_join really work? (in R; dplyr)
我有一個包含郵政編碼和相應城市的數據集。 在某些情況下,郵政編碼丟失了,所以我想用R中的郵政編碼庫中的郵政編碼替換它。
顯然,“紐約”有多個郵政編碼。 在我的交易數據集中,同一居民出現多次,因此他們的城市(例如“紐約”)也出現多次。
使用dplyr的left_join函數,結合城市名稱,我得到城市名稱“ New York”的相應郵政編碼,如下所示:
10001,
10002,
10003,
etc.
將此與vlookup進行比較,Excel始終會進行第一個可能的查找匹配,在這種情況下為10001。
根據這里的邏輯,R將“紐約”與每行的不同郵政編碼匹配嗎?
左聯接將始終獲取左表中的所有條目,並添加右表中的匹配項:
我認為下面的圖像清楚地顯示了邏輯,您可以忽略那里的SQL語句。
如果您left_join doctors
和visits
,我們將以左表為起點,並添加右表中的所有匹配項。 在這種情況下,具有doctor_id
212的Doctor在表visits
具有兩個匹配項,因此這兩個vistis都被添加到了結果表中。
因此,Excel所做的不是左聯接。 它僅查找單個參考值,而忽略其余參考值。
如果要從Excel復制行為,則可以通過刪除聯接列中的所有重復項來首先過濾訪問表。 例如:
visits = data.frame(doctor_id=c('a','b','c','a'),time=c(1,2,3,4))
visits = visits[!duplicated(visits$doctor_id),]
然后使用該表進行左聯接。 希望這可以幫助!
左聯接實際上將“ x”小詞與“ y”小詞合並,從而保留x的所有條目,但僅聯接在x中具有匹配項的y條目(通過特定變量)。
你可以在下面看到
dataframe "x"
rank title
<chr> <chr>
1 2,801. Lines
2 2,802. Nocno zivljenje
3 2,803. Saber Google
4 2,804. Sacred Vow
5 2,805. Was hat uns bloß so ruiniert
6 2,806. Our Time
7 2,807. Orecchie
8 2,808. Marshrut postroen
9 2,809. Shor Se Shuruaat
10 2,810. Oru Murai Vanthu Paarthaya
dataframe "y"
rank genre
1 2,801. Drama
2 2,802. Crime, Drama, Mystery
3 2,803. Comedy
4 2,804. Drama
5 2,805. Comedy
6 2,806. Drama
在應用left_join之后
left_join(x,y, by ="rank")
" rank title genre
<chr> <chr> <chr>
1 2,801. Lines Drama
2 2,802. Nocno zivljenje Crime, Drama, Mystery
3 2,803. Saber Google Comedy
4 2,804. Sacred Vow <NA>
5 2,805. Was hat uns bloß so ruiniert <NA>
6 2,806. Our Time <NA>
7 2,807. Orecchie <NA>
8 2,808. Marshrut postroen <NA>
9 2,809. Shor Se Shuruaat <NA>
10 2,810. Oru Murai Vanthu Paarthaya <NA>"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.