3.1 簡(jiǎn)介
dplyr: 創(chuàng)建新變量或者摘要統(tǒng)計(jì)量兽泣,或者對(duì)變量重命名或排序。
3.1.1 準(zhǔn)備工作
加載dplyr和數(shù)據(jù)包3.1.2 nycflight13
2013年從紐約市出發(fā)的航班信息336 776次航班
?flights查看其說(shuō)明文檔
- 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ù)就是小數(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)
: matchesx1
,x2
andx3
- 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()
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)行踏兜。