第一部分探索--第3章 使用dplyr進(jìn)行數(shù)據(jù)轉(zhuǎn)換

3.1 簡(jiǎn)介

dplyr: 創(chuàng)建新變量或者摘要統(tǒng)計(jì)量兽泣,或者對(duì)變量重命名或排序。

3.1.1 準(zhǔn)備工作

加載dplyr和數(shù)據(jù)包
加載dplyrh和nycflight13數(shù)據(jù)包

3.1.2 nycflight13

2013年從紐約市出發(fā)的航班信息336 776次航班
?flights查看其說(shuō)明文檔

flights

  • int:整數(shù)型變量 integers
  • dbl:實(shí)數(shù) doubles or real numbers
  • chr:字符向量/字符串 character vectors or strings
  • dttm:日期+時(shí)間型變量 a date+a time
  • lgl:邏輯型變量,僅包括TRUE 和FALSE logical
  • fctr:因子华望,固定數(shù)目的值的分類變量 factor
  • date:日期型變量 dates

3.1.3 dplyr基礎(chǔ)

5個(gè)核心函數(shù)+group_by()

  • 按值篩選觀測(cè):(filter())
  • 對(duì)行進(jìn)行重新排序 (arrange())
  • 按名稱選取變量 (select())
  • 使用現(xiàn)有變量創(chuàng)建新變量 (mutate())
  • 多個(gè)值總結(jié)為一個(gè)摘要統(tǒng)計(jì)量 (summarize())
    工作方式:
    (1)第一個(gè)參數(shù)是一個(gè)數(shù)據(jù)框
    (2)隨后參數(shù)使用變量名稱(不帶引號(hào))描述了在數(shù)據(jù)框進(jìn)行的操作
    (3)輸出結(jié)果是一個(gè)新數(shù)據(jù)框

3.2 使用filter()篩選行

基礎(chǔ)知識(shí)

舉例:篩選出1月1日的所有航班

  • 輸出結(jié)果


    篩選出1月1日的所有航班
  • 篩選后保存--要賦值操作
    > jan1 <- filter(flights, month==1,day==1)
  • 輸出結(jié)果同時(shí)保存變量

3.2.1 比較運(yùn)算符

比較運(yùn)算符:>, >=, <, <=, !=(不等于), ==(等于)
near() 近似值用于浮點(diǎn)數(shù)

什么是浮點(diǎn)數(shù)

浮點(diǎn)數(shù)就是小數(shù)點(diǎn)可以任意浮動(dòng)的數(shù)字丈秩。

在計(jì)算機(jī)的機(jī)器語(yǔ)言中,只有二進(jìn)制烁巫,機(jī)器語(yǔ)言只能識(shí)別0和1署隘。所以,計(jì)算機(jī)也是不可能存儲(chǔ)小數(shù)的亚隙,所以需要有另一種變通的存儲(chǔ)方案磁餐。這種方案就是指數(shù)方案:

3.2.2 邏輯運(yùn)算符

  • & :與
  • | :或
  • !:非
    布爾運(yùn)算符

    舉例:
    找出11月或12月出發(fā)的所有航班 > filter(flights,month==11|month==12)
    找出延誤時(shí)間(到達(dá)或出發(fā))不多于2小時(shí)的航班 > filter(flights,!(arr_delay>120|dep_delay>120)); > filter(flights,arr_delay<=120, dep_delay<=120)
    !(x&y) = !x|!y 不等于x和y=既不等于x或不等于y
    !(x|y) = !x&!y 不等于x或y=不等于x和不等于y

3.2.3 缺失值

  • NA =缺失值=not available阿弃,不可用诊霹。
  • 缺失值“可傳染的”,如果運(yùn)算中包含了未知值渣淳,那么運(yùn)算結(jié)果一般也是未知值脾还。


  • 如果想要確定一個(gè)值是否為缺失值,可以使用is.na()函數(shù):is.na(x)
  • filter()只能篩選出條件為TRUE的行入愧;它會(huì)排除那些條件為FALSE和NA的行鄙漏。
  • 若想保留缺失值,可以明確指出is.na(x)

3.3 使用arrange()排列行

  • 接受一個(gè)數(shù)據(jù)框和一組作為排序依據(jù)的列名作為參數(shù)棺蛛。若列名不止一個(gè)泥张,那么使用后面的列在前面排序的基礎(chǔ)上繼續(xù)排序。
    > arrange(flights, year,month,day)
  • 使用desc()按列降序排序 > arrange(flights, desc(arr_delay))
  • 缺失值總是排在最后

3.4 使用select()選擇列

  • 按名稱選擇列
  • 選擇"year"和"day"之間的所有列(包括year 和day)
  • 選擇不在"year"和"day"之間的所有列(不包括year和day)
  • 輔助函數(shù):
    starts_with("abc"): matches names that begin with “abc”.
    ends_with("xyz"): matches names that end with “xyz”.
    contains("ijk"): matches names that contain “ijk”.
    matches("(.)\\1"): selects variables that match a regular expression. This one matches any variables that contain repeated characters. You’ll learn more about regular expressions in strings.
    num_range("x", 1:3): matches x1, x2 and x3
  • rename()來(lái)重命名變量 rename(flights, tali_num=tailnum)
  • select()函數(shù)和everything()輔助函數(shù)結(jié)果使用:將幾個(gè)變量移到數(shù)據(jù)框開(kāi)頭select(flights, time_hour, air_time, everything())

3.5 使用mutate()添加新變量

基礎(chǔ)知識(shí)

  • mutate()函數(shù):新列添加在數(shù)據(jù)集的最后
> flights_sml <- select(flights, year:day, ends_with("delay"),distance,air_time)
> mutate(flights_sml, gain=arr_delay-dep_delay, speed=distance/air_time*60)
  • transmute()函數(shù):只想保留新變量
    > transmute(flights, gain=arr_delay-dep_delay,hours=air_time/60,gain_per_hour=gain/hours)

3.5.1 常用創(chuàng)建函數(shù)

  • 算數(shù)運(yùn)算符 Arithmetic operators:+鞠值, -媚创, *, /彤恶, ^
  • 模運(yùn)算符 Modular arithmetic:%/% (整數(shù)除法 integer division) and %% (求余
    remainder), where x == y * (x %/% y) + (x %% y)
  • 對(duì)數(shù)函數(shù):log(), log2(), log10()
  • 偏移函數(shù):lead(), lag()
  • 累加和滾動(dòng)聚合:cumsum(), cumprod(), commim(), cummax(), cummean()
  • 邏輯比較:<, <=, >, >=, 和!=
  • 排秩:min_rank(), row_number(), dense_rank(), percent_rank(), cume_dist()

3.6 使用summarize()進(jìn)行分組摘要

summarize: 將數(shù)據(jù)框折疊成一行钞钙。



summarize()+group_by()

舉例:對(duì)按日期分組的一個(gè)數(shù)據(jù)框應(yīng)用summarize,就可以得到每日平均延誤時(shí)間

3.6.1 使用管道組合多種操作

研究每個(gè)目的地的距離和平均延誤時(shí)間之間的關(guān)系声离。

  • 完成數(shù)據(jù)準(zhǔn)備分3步:
    (1)按照目的地對(duì)航班進(jìn)行分組:by_dest <- group_by(flights, dest)
    (2)進(jìn)行摘要統(tǒng)計(jì)芒炼,計(jì)算距離,平均延誤時(shí)間和航班數(shù)量:delay <- summarize(by_dest,count=n(), dist=mean(distance, na.rm=TRUE),delay=mean(arr_delay, na.rm = TRUE))
    (3)篩選去除噪聲點(diǎn)和火奴魯魯加長(zhǎng): delay <- filter(delay, count>20, dest!="HNL")
  • 作圖
    ggplot(data = delay, mapping = aes(x=dist, y=delay))+
    geom_point(aes(size=count),alpha=1/3)+
    geom_smooth(se=FALSE)
> by_dest <- group_by(flights, dest)
> delay <- summarize(by_dest,count=n(), dist=mean(distance, na.rm=TRUE),delay=mean(arr_delay, na.rm = TRUE))
> delay <- filter(delay, count>20, dest!="HNL")
> ggplot(data = delay, mapping = aes(x=dist, y=delay))+
+ geom_point(aes(size=count),alpha=1/3)+
+ geom_smooth(se=FALSE)
`geom_smooth()` using method = 'loess' and formula 'y ~ x'


na.rm=remove NA

另一種方法是使用管道“%>%术徊。%>%=然后”

> delays <- flights %>%
+ group_by(dest)%>%
+ summarize(count=n(),dist=mean(distance, na.rm=TRUE),delay=mean(arr_delay, na.rm = TRUE))%>%
+ filter(count>20,dest!="HNL")

3.6.2 缺失值

na.rm參數(shù)就是在計(jì)算前除去缺失值
示列



缺失值表示取消的航班本刽,可以先去除取消的航班來(lái)解決缺失值問(wèn)題。


3.6.3 計(jì)數(shù)

一個(gè)計(jì)數(shù)(n())或非缺失值的計(jì)數(shù)(sum(!is.na())
舉例:查看具有最長(zhǎng)平均延誤時(shí)間的飛機(jī)(通過(guò)機(jī)尾編號(hào)進(jìn)行識(shí)別)

> delays <- not_cancelled%>%
+ group_by(tailnum) %>% 
+ summarize(delay=mean(arr_delay))
> ggplot(data=delays, mapping = aes(x=delay))+
+ geom_freqpoly(binwidth=10)

航班數(shù)量和平均延誤時(shí)間的散點(diǎn)圖

+ group_by(tailnum) %>%
+ summarise(delay=mean(arr_delay, na.rm = TRUE),n=n())
> ggplot(data = delays, mapping = aes(x=n,y=delay))+
+ geom_point(alpha=1/10)
+ filter(n>25) %>% 
+ ggplot(mapping = aes(x=n,y=delay))+
+ geom_point(alpha=1/10)

3.6.4 常用的摘要函數(shù)

  • 位置度量
  • 分散程度度量
    sd(x)均方誤差(標(biāo)準(zhǔn)誤差), IQR(x)四分位距, mad(x)絕對(duì)中位差
  • 秩的度量
    min(x), quantile(x,0.25)(找出x中按從小到大順序大于前25%而小于后75%的值), max(x)
  • 定位度量
    first(x), nth(x,2), last(x)
  • 計(jì)數(shù)n()
    計(jì)算出非缺失值的數(shù)量:sum(!is.na(x))
    計(jì)算出唯一值的數(shù)量:distinct(x)
  • 邏輯值的計(jì)數(shù)和比例:sum(x>10)和mean(y==0)

3.6.5 按多個(gè)變量分組: group_by()

循序漸進(jìn)地進(jìn)行摘要分析:

3.6.6 取消分組:ungroup()

3.6.7 練習(xí)

3.7 分組新變量(和篩選器)

  • 找出每個(gè)分組中最差的成員
  • 找出大于某個(gè)閾值的所有分組
  • 對(duì)數(shù)據(jù)進(jìn)行標(biāo)準(zhǔn)化以計(jì)算分組指標(biāo)


總結(jié)

這章學(xué)下來(lái)感覺(jué)還是有點(diǎn)難度癣丧,要懂點(diǎn)數(shù)據(jù)統(tǒng)計(jì)知識(shí)蜕企,邏輯性要好, 對(duì)數(shù)據(jù)把握好才能進(jìn)行對(duì)的命令運(yùn)行踏兜。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末斜友,一起剝皮案震驚了整個(gè)濱河市炸裆,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌鲜屏,老刑警劉巖烹看,帶你破解...
    沈念sama閱讀 222,627評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異洛史,居然都是意外死亡惯殊,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,180評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門也殖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)土思,“玉大人,你說(shuō)我怎么就攤上這事毕源±四” “怎么了陕习?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,346評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵霎褐,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我该镣,道長(zhǎng)冻璃,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 60,097評(píng)論 1 300
  • 正文 為了忘掉前任损合,我火速辦了婚禮省艳,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘嫁审。我一直安慰自己跋炕,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,100評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布律适。 她就那樣靜靜地躺著辐烂,像睡著了一般。 火紅的嫁衣襯著肌膚如雪捂贿。 梳的紋絲不亂的頭發(fā)上纠修,一...
    開(kāi)封第一講書(shū)人閱讀 52,696評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音厂僧,去河邊找鬼扣草。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的辰妙。 我是一名探鬼主播鹰祸,決...
    沈念sama閱讀 41,165評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼上岗!你這毒婦竟也來(lái)了福荸?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 40,108評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤肴掷,失蹤者是張志新(化名)和其女友劉穎敬锐,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體呆瞻,經(jīng)...
    沈念sama閱讀 46,646評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡台夺,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,709評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了痴脾。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片颤介。...
    茶點(diǎn)故事閱讀 40,861評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖赞赖,靈堂內(nèi)的尸體忽然破棺而出滚朵,到底是詐尸還是另有隱情,我是刑警寧澤前域,帶...
    沈念sama閱讀 36,527評(píng)論 5 351
  • 正文 年R本政府宣布辕近,位于F島的核電站,受9級(jí)特大地震影響匿垄,放射性物質(zhì)發(fā)生泄漏移宅。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,196評(píng)論 3 336
  • 文/蒙蒙 一椿疗、第九天 我趴在偏房一處隱蔽的房頂上張望漏峰。 院中可真熱鬧,春花似錦届榄、人聲如沸浅乔。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,698評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)靖苇。三九已至,卻和暖如春攻晒,著一層夾襖步出監(jiān)牢的瞬間顾复,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,804評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工鲁捏, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留芯砸,地道東北人萧芙。 一個(gè)月前我還...
    沈念sama閱讀 49,287評(píng)論 3 379
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像假丧,于是被迫代替她去往敵國(guó)和親双揪。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,860評(píng)論 2 361

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