3.1 简介
dplyr: 创建新变量或者摘要统计量,或者对变量重命名或排序。
3.1.1 准备工作
加载dplyr和数据包3.1.2 nycflight13
2013年从纽约市出发的航班信息336 776次航班
?flights查看其说明文档
- int:整数型变量 integers
- dbl:实数 doubles or real numbers
- chr:字符向量/字符串 character vectors or strings
- dttm:日期+时间型变量 a date+a time
- lgl:逻辑型变量,仅包括TRUE 和FALSE logical
- fctr:因子,固定数目的值的分类变量 factor
- date:日期型变量 dates
3.1.3 dplyr基础
5个核心函数+group_by()
- 按值筛选观测:(filter())
- 对行进行重新排序 (arrange())
- 按名称选取变量 (select())
- 使用现有变量创建新变量 (mutate())
- 多个值总结为一个摘要统计量 (summarize())
工作方式:
(1)第一个参数是一个数据框
(2)随后参数使用变量名称(不带引号)描述了在数据框进行的操作
(3)输出结果是一个新数据框
3.2 使用filter()筛选行
基础知识
举例:筛选出1月1日的所有航班
-
输出结果
- 筛选后保存--要赋值操作
> jan1 <- filter(flights, month==1,day==1)
-
输出结果同时保存变量
3.2.1 比较运算符
比较运算符:>, >=, <, <=, !=(不等于), ==(等于)
near() 近似值用于浮点数
浮点数就是小数点可以任意浮动的数字。
在计算机的机器语言中,只有二进制,机器语言只能识别0和1。所以,计算机也是不可能存储小数的,所以需要有另一种变通的存储方案。这种方案就是指数方案:
3.2.2 逻辑运算符
- & :与
- | :或
- !:非
举例:
找出11月或12月出发的所有航班> filter(flights,month==11|month==12)
找出延误时间(到达或出发)不多于2小时的航班> 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,不可用。
-
缺失值“可传染的”,如果运算中包含了未知值,那么运算结果一般也是未知值。
- 如果想要确定一个值是否为缺失值,可以使用is.na()函数:is.na(x)
- filter()只能筛选出条件为TRUE的行;它会排除那些条件为FALSE和NA的行。
- 若想保留缺失值,可以明确指出is.na(x)
3.3 使用arrange()排列行
- 接受一个数据框和一组作为排序依据的列名作为参数。若列名不止一个,那么使用后面的列在前面排序的基础上继续排序。
> arrange(flights, year,month,day)
- 使用desc()按列降序排序
> arrange(flights, desc(arr_delay))
- 缺失值总是排在最后
3.4 使用select()选择列
-
按名称选择列
-
选择"year"和"day"之间的所有列(包括year 和day)
-
选择不在"year"和"day"之间的所有列(不包括year和day)
- 辅助函数:
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()来重命名变量
rename(flights, tali_num=tailnum)
- select()函数和everything()辅助函数结果使用:将几个变量移到数据框开头
select(flights, time_hour, air_time, everything())
3.5 使用mutate()添加新变量
基础知识
- mutate()函数:新列添加在数据集的最后
> 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()函数:只想保留新变量
> transmute(flights, gain=arr_delay-dep_delay,hours=air_time/60,gain_per_hour=gain/hours)
3.5.1 常用创建函数
- 算数运算符 Arithmetic operators:+, -, *, /, ^
- 模运算符 Modular arithmetic:%/% (整数除法 integer division) and %% (求余
remainder), where x == y * (x %/% y) + (x %% y) - 对数函数:log(), log2(), log10()
- 偏移函数:lead(), lag()
- 累加和滚动聚合:cumsum(), cumprod(), commim(), cummax(), cummean()
- 逻辑比较:<, <=, >, >=, 和!=
- 排秩:min_rank(), row_number(), dense_rank(), percent_rank(), cume_dist()
3.6 使用summarize()进行分组摘要
summarize: 将数据框折叠成一行。
summarize()+group_by()
3.6.1 使用管道组合多种操作
研究每个目的地的距离和平均延误时间之间的关系。
-
完成数据准备分3步:
(1)按照目的地对航班进行分组:by_dest <- group_by(flights, dest)
(2)进行摘要统计,计算距离,平均延误时间和航班数量:delay <- summarize(by_dest,count=n(), dist=mean(distance, na.rm=TRUE),delay=mean(arr_delay, na.rm = TRUE))
(3)筛选去除噪声点和火奴鲁鲁加长: 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参数就是在计算前除去缺失值
示列
缺失值表示取消的航班,可以先去除取消的航班来解决缺失值问题。
3.6.3 计数
一个计数(n())或非缺失值的计数(sum(!is.na())
举例:查看具有最长平均延误时间的飞机(通过机尾编号进行识别)
> delays <- not_cancelled%>%
+ group_by(tailnum) %>%
+ summarize(delay=mean(arr_delay))
> ggplot(data=delays, mapping = aes(x=delay))+
+ geom_freqpoly(binwidth=10)
航班数量和平均延误时间的散点图
+ 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 常用的摘要函数
-
位置度量
-
分散程度度量
sd(x)均方误差(标准误差), IQR(x)四分位距, mad(x)绝对中位差
-
秩的度量
min(x), quantile(x,0.25)(找出x中按从小到大顺序大于前25%而小于后75%的值), max(x)
-
定位度量
first(x), nth(x,2), last(x)
-
计数n()
计算出非缺失值的数量:sum(!is.na(x))
计算出唯一值的数量:distinct(x) - 逻辑值的计数和比例:sum(x>10)和mean(y==0)
3.6.5 按多个变量分组: group_by()
循序渐进地进行摘要分析:3.6.6 取消分组:ungroup()
3.6.7 练习
3.7 分组新变量(和筛选器)
-
找出每个分组中最差的成员
-
找出大于某个阈值的所有分组
-
对数据进行标准化以计算分组指标
总结
这章学下来感觉还是有点难度,要懂点数据统计知识,逻辑性要好, 对数据把握好才能进行对的命令运行。