join家族函數(shù)
數(shù)據(jù)分析僅涉及單個數(shù)據(jù)表很少見。通常情況下,您有許多數(shù)據(jù)表,并且您必須將它們組合起來以回答您感興趣的問題??偠灾鄠€數(shù)據(jù)表稱為關(guān)系數(shù)據(jù),關(guān)系總是定義在一對表格之間。所有其他關(guān)系都是從這個簡單的想法構(gòu)建而成的:三個或更多表格的關(guān)系總是每對之間關(guān)系的屬性。有時候一對中的兩個元素都可以是同一張表!
介紹下面join幾大函數(shù)
left_join
表示從左面開始添加,
數(shù)據(jù)準(zhǔn)備
library(tidyverse)
library(nycflights13)
flights2 <- flights %>%
select(year:day, hour, origin, dest, tailnum, carrier)
flights2
我們接著看一下airline是什么內(nèi)容?
image
flights2 %>%
select(-origin, -dest) %>%
left_join(airlines, by = "carrier")###等價于left_join(flights2,airlines, by = "carrier")
直接看結(jié)果
image
實際上我們可以這樣理解,left_join輸入兩個參數(shù),分別代表左邊和右邊,第一個參數(shù)默認(rèn)在左邊,第二個參數(shù)在右邊補充。本例中代表airlines中的數(shù)據(jù)自動填充到carrier后面。
這里給大家看一下left_join(x,y)形象的圖型
image
image
image
看了這個圖,其實更明白了,就是一對多的哈希呀,從一對一,到一對多的轉(zhuǎn)變
inner_join函數(shù)
最簡單的連接類型是inner_join。當(dāng)它們的鍵相等時,就可以內(nèi)部鏈接,擴大值的范圍:
例如:
x <- tribble( ~key, ~val_x, 1, "x1", 2, "x2", 3, "x3")
y <- tribble( ~key, ~val_y, 1, "y1", 2, "y2", 4, "y3")
x %>%
inner_join(y, by = "key")##一定不要忘記by參數(shù)
##等價于 inner_join(x,y, by = "key")
image
其本質(zhì)上就是X,Y在key完全相等的行取出來合并,按照順序X在左,y在右
Outer joins
inner_join函數(shù)僅僅保存兩個表中都出現(xiàn)的觀察值。Outer_joins則相反,保存至少一個表中出現(xiàn)的觀察結(jié)果。外部連接有三種類型
A left join keeps all observations in x.
A right join keeps all observations in y.
A full join keeps all observations in x and y
image
image
merge函數(shù)其實可以執(zhí)行上面所有的操作,如下:
image