高效數(shù)據(jù)整理工具——dplyr(二)多數(shù)據(jù)框處理

高效數(shù)據(jù)整理工具——dplyr(一)中,簡(jiǎn)要介紹使用dplyr對(duì)但數(shù)據(jù)表的處理鳖擒,在本節(jié)中將會(huì)學(xué)習(xí)如何使用dplyr對(duì)多數(shù)據(jù)表進(jìn)行處理溉浙。主要函數(shù)有如下圖所示。

image.png

1蒋荚、數(shù)據(jù)框合并

兩個(gè)數(shù)據(jù)框合并可分別使用bind_rows(y, z)bind_cols(y, z)進(jìn)行行或者列合并戳稽。

> df1 <- data.frame(a=1:2,b=3:4);df1
  a b
1 1 3
2 2 4
> df2 <-data.frame(a=5:6,b=7:8);df2
  a b
1 5 7
2 6 8
> bind_rows(df1,df2)
  a b
1 1 3
2 2 4
3 5 7
4 6 8
> bind_cols(df1,df2)
  a b a1 b1
1 1 3  5  7
2 2 4  6  8

此外,也可以使用R自帶的rbind()cbind()進(jìn)行數(shù)據(jù)框的合并期升。

2惊奇、數(shù)據(jù)框連接

dplyr提供了left_join(), right_join(), inner_join(), full_join()來(lái)提供不同的連接方式。
left_join() 以左邊數(shù)據(jù)框?yàn)榛鶞?zhǔn)播赁,將右邊數(shù)據(jù)框連接進(jìn)去颂郎,可存在一對(duì)多的映射關(guān)系,保留左邊數(shù)據(jù)框的所有行容为。

> df1 <- data.frame(x = c(1, 2), y = 2:1)
> df2 <- data.frame(x = c(1, 3), a = 10, b = "a")
> df1;df2
  x y
1 1 2
2 2 1
  x  a b
1 1 10 a
2 3 10 a
> left_join(df1,df2)
Joining, by = "x"
  x y  a    b
1 1 2 10    a
2 2 1 NA <NA>

right_join()用法與left_join()相似乓序,只是以右邊為基準(zhǔn),連接左側(cè)數(shù)據(jù)框坎背。

> right_join(df1,df2)
Joining, by = "x"
  x  y  a b
1 1  2 10 a
2 3 NA 10 a

inner_join()則是選取連接后兩個(gè)數(shù)據(jù)框都有的記錄保留替劈。

> inner_join(df1,df2)
Joining, by = "x"
  x y  a b
1 1 2 10 a

full_join()則是保留兩個(gè)數(shù)據(jù)框的所有記錄。

> inner_join(df1,df2)
Joining, by = "x"
  x y  a b
1 1 2 10 a

除了上面四種常見(jiàn)的連接方式外得滤,dplyr還提供了另外兩個(gè)函數(shù)通過(guò)共有記錄來(lái)篩選數(shù)據(jù):semi_join(x,y)只保留x中能與y匹配的記錄抬纸;而anti_join(x,y)則是丟掉x中與y匹配的記錄。

3耿戚、數(shù)據(jù)框間的交集湿故、差集與并集

dplyr提供了intersect(x,y)union(x,y)膜蛔,setdiff(x,y)三個(gè)函數(shù)來(lái)分別進(jìn)行求交集坛猪、并集和差集。

> df1 <- data_frame(x = 1:2, y = c(1L, 1L))
> df2 <- data_frame(x = 1:2, y = 1:2)
> df1;df2
# A tibble: 2 x 2
      x     y
  <int> <int>
1     1     1
2     2     1
# A tibble: 2 x 2
      x     y
  <int> <int>
1     1     1
2     2     2
> df1;df2
# A tibble: 2 x 2
      x     y
  <int> <int>
1     1     1
2     2     1
# A tibble: 2 x 2
      x     y
  <int> <int>
1     1     1
2     2     2
# 交集
> intersect(df1,df2)
# A tibble: 1 x 2
      x     y
  <int> <int>
1     1     1
# 并集
> union(df1,df2)
# A tibble: 3 x 2
      x     y
  <int> <int>
1     1     1
2     2     1
3     2     2
# 差集
> setdiff(df1,df2)
# A tibble: 1 x 2
      x     y
  <int> <int>
1     2     1
4皂股、多個(gè)數(shù)據(jù)框的連接

對(duì)于多個(gè)數(shù)據(jù)框的連接可以使用purrr包中的reduce函數(shù):

library(dplyr)
x <- data_frame(i = c("a","b","c"), j = 1:3)
y <- data_frame(i = c("b","c","d"), k = 4:6)
z <- data_frame(i = c("c","d","a"), l = 7:9)

list(x, y, z) %>% reduce(full_join, by = "i")
# A tibble: 4 x 4
# i         j     k     l
# <chr> <int> <int> <int>
#   1 a         1    NA     9
# 2 b         2     4    NA
# 3 c         3     5     7
# 4 d        NA     6     8

list(x, y, z) %>% reduce(inner_join, by = "i")
# A tibble: 1 x 4
# i         j     k     l
# <chr> <int> <int> <int>
#   1 c         3     5     7

參考:
R語(yǔ)言入門(mén)7:數(shù)據(jù)處理之雙表操作-Dplyr
官方文檔

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末墅茉,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子呜呐,更是在濱河造成了極大的恐慌就斤,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,284評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蘑辑,死亡現(xiàn)場(chǎng)離奇詭異洋机,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)洋魂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)绷旗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)喜鼓,“玉大人,你說(shuō)我怎么就攤上這事衔肢∽” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,614評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵角骤,是天一觀的道長(zhǎng)隅忿。 經(jīng)常有香客問(wèn)我,道長(zhǎng)邦尊,這世上最難降的妖魔是什么背桐? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,671評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮胳赌,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘匙隔。我一直安慰自己疑苫,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布纷责。 她就那樣靜靜地躺著捍掺,像睡著了一般。 火紅的嫁衣襯著肌膚如雪再膳。 梳的紋絲不亂的頭發(fā)上挺勿,一...
    開(kāi)封第一講書(shū)人閱讀 51,562評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音喂柒,去河邊找鬼不瓶。 笑死,一個(gè)胖子當(dāng)著我的面吹牛灾杰,可吹牛的內(nèi)容都是我干的蚊丐。 我是一名探鬼主播,決...
    沈念sama閱讀 40,309評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼艳吠,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼麦备!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起昭娩,我...
    開(kāi)封第一講書(shū)人閱讀 39,223評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤凛篙,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后栏渺,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體呛梆,經(jīng)...
    沈念sama閱讀 45,668評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評(píng)論 3 336
  • 正文 我和宋清朗相戀三年磕诊,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了削彬。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片全庸。...
    茶點(diǎn)故事閱讀 39,981評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖融痛,靈堂內(nèi)的尸體忽然破棺而出壶笼,到底是詐尸還是另有隱情,我是刑警寧澤雁刷,帶...
    沈念sama閱讀 35,705評(píng)論 5 347
  • 正文 年R本政府宣布覆劈,位于F島的核電站,受9級(jí)特大地震影響沛励,放射性物質(zhì)發(fā)生泄漏责语。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評(píng)論 3 330
  • 文/蒙蒙 一目派、第九天 我趴在偏房一處隱蔽的房頂上張望坤候。 院中可真熱鬧,春花似錦企蹭、人聲如沸白筹。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,904評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)徒河。三九已至,卻和暖如春送漠,著一層夾襖步出監(jiān)牢的瞬間顽照,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,023評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工闽寡, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留代兵,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,146評(píng)論 3 370
  • 正文 我出身青樓爷狈,卻偏偏與公主長(zhǎng)得像奢人,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子淆院,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容