超级好用的dplyr, 让你从数据小白跨出一大步。
以下内容主要来自 R for data science 书第五章内容前半部分,主要讲几个基本命令(filter、arrange、select 、mutate、summarise)的操作。
1.载入需要的R包
library(tidyverse) #dplyr包已经被整合入tidyverse包
library(nycflights13) #载入这个包主要是用里面的示例数据做分析
2.使用命令
- filter 按照条件过滤数据
- arrange 排序
- select 按照列名选择变量。功能强大,可使用正则表达式。
- mutate 基于现有变量创造新变量
- summarise 汇总统计数据,常和分组命令(groupby)一起使用
3.filter
过滤样本,可结合逻辑变量一起使用:
-
&
代表 和 -
|
代表 或 -
!
代表 非 -
%in%
代表 是否被包含。 如1 %in% c(1,2)
代表1是否包含于 c(1,2)。该命令会返回True。
#筛选出1月1号的航班
filter(flights, month==1, day==1)
#筛选出1月或2月的航班
filter(flights, month==1 | month==2)
#筛选出不在1月或2月的航班
filter(flights, !(month==1 | month==2))
4.arrange
排序。
- 可按多个关键字排序,从前到后由主到次。
- 默认升序,降序需要在排序变量外加desc,如:
desc(month)
#按时间顺序由前到后排序
arrange(filter, year, month, day)
#按航班延误时间有多到少排序
arrange(flights, desc(arr_delay))
5.select
按变量名选择子数据框
- 使用
:
可以连续选取 - 使用
-
可删除指定变量 -
starts_with()
,end_with()
,contains()
分别代表选取以指定字符开始、以指定字符结尾,包含指定字符的变量名。 -
matches()
可使用正则表达式匹配变量名
#选取变量名以“d”开头的变量
select(flights, ends_with("d"))
#选取变量名以“time”结尾的变量
select(flights, ends_with("time"))
#选取变量名中包含“dep”的变量
select(flights, contains("time"))
#使用正则表达式选取变量名以“d”开头的变量
select(flights, matches("^d"))
关于正则表达式的概念,以后会详细讲解。
rename()
可直接对变量重命名。如:
rename(flights, mon = month)
6.mutate
增加新的变量。可对已有变量进行数学计算后生成新变量。
# 使用航班到达时间减去航班出发时间生成航班运行时间变量。
mutate(flights, use_time = arr_time - dep_time)
transmute
只保留新生成的变量。如:
transmute(flights, use_time = arr_time - dep_time)
7.summaries
获得变量的汇总统计结果(均值,最大值,最小值,方差等),常和groupby一起使用,获得不同分组的汇总统计结果
#计算航班平均延误时间
summarise(flights, mean(dep_delay, na.rm=TRUE))
#计算航班每月的平均延误时间
flights %>% group_by(month) %>% summarise( mean(dep_delay, na.rm=TRUE))
这里出现了一个新的符号%>%
,是dplyr专用的。我们称之为管道符,功能类似于shell中的|
,作用是讲前面的变量传递到后面使用。
这个功能最大的好处是减少代码运行过程中生成的中间变量。
na.rm = TRUE
是R中常用的命令,在apply函数中也经常用到。作用是计算时不考虑缺失数据。