dplyr包是tidyverse系列用于数据处理的包,常用函数有:
- filter()选择个案
- arrange()排序
- select()选择变量
- rename()变量重命名
- mutate()创建新变量
- summarize()汇总变量
加载包与数据
library(tidyverse)
data <- as_tibble(mtcars,rownames = 'rownames')
data
# A tibble: 32 x 12
rownames mpg cyl disp hp drat wt qsec vs am gear carb
<chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 Mazda RX4 21 6 160 110 3.9 2.62 16.5 0 1 4 4
2 Mazda RX4 Wag 21 6 160 110 3.9 2.88 17.0 0 1 4 4
3 Datsun 710 22.8 4 108 93 3.85 2.32 18.6 1 1 4 1
4 Hornet 4 Drive 21.4 6 258 110 3.08 3.22 19.4 1 0 3 1
5 Hornet Sportabout 18.7 8 360 175 3.15 3.44 17.0 0 0 3 2
6 Valiant 18.1 6 225 105 2.76 3.46 20.2 1 0 3 1
7 Duster 360 14.3 8 360 245 3.21 3.57 15.8 0 0 3 4
8 Merc 240D 24.4 4 147. 62 3.69 3.19 20 1 0 4 2
9 Merc 230 22.8 4 141. 95 3.92 3.15 22.9 1 0 4 2
10 Merc 280 19.2 6 168. 123 3.92 3.44 18.3 1 0 4 4
# ... with 22 more rows
filter选择个案
filter函数用于选择个案,它的格式为:
filter(data,...)
它支持比较运算符:>,>=,<,<=,!=,==
需要注意的是等于号为==,而不是=
同样也支持逻辑运算符:&
与,|
或,!
非
#选择carb等于4的个案
filter(data,carb == 4)
# A tibble: 10 x 12
rownames mpg cyl disp hp drat wt qsec vs am
<chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 Mazda R~ 21 6 160 110 3.9 2.62 16.5 0 1
2 Mazda R~ 21 6 160 110 3.9 2.88 17.0 0 1
3 Duster ~ 14.3 8 360 245 3.21 3.57 15.8 0 0
4 Merc 280 19.2 6 168. 123 3.92 3.44 18.3 1 0
5 Merc 28~ 17.8 6 168. 123 3.92 3.44 18.9 1 0
6 Cadilla~ 10.4 8 472 205 2.93 5.25 18.0 0 0
7 Lincoln~ 10.4 8 460 215 3 5.42 17.8 0 0
8 Chrysle~ 14.7 8 440 230 3.23 5.34 17.4 0 0
9 Camaro ~ 13.3 8 350 245 3.73 3.84 15.4 0 0
10 Ford Pa~ 15.8 8 351 264 4.22 3.17 14.5 0 1
# ... with 2 more variables: gear <dbl>, carb <dbl>
#选择mpg大于15的个案
filter(data,mpg >15)
# A tibble: 26 x 12
rownames mpg cyl disp hp drat wt qsec vs am
<chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 Mazda R~ 21 6 160 110 3.9 2.62 16.5 0 1
2 Mazda R~ 21 6 160 110 3.9 2.88 17.0 0 1
3 Datsun ~ 22.8 4 108 93 3.85 2.32 18.6 1 1
4 Hornet ~ 21.4 6 258 110 3.08 3.22 19.4 1 0
5 Hornet ~ 18.7 8 360 175 3.15 3.44 17.0 0 0
6 Valiant 18.1 6 225 105 2.76 3.46 20.2 1 0
7 Merc 24~ 24.4 4 147. 62 3.69 3.19 20 1 0
8 Merc 230 22.8 4 141. 95 3.92 3.15 22.9 1 0
9 Merc 280 19.2 6 168. 123 3.92 3.44 18.3 1 0
10 Merc 28~ 17.8 6 168. 123 3.92 3.44 18.9 1 0
# ... with 16 more rows, and 2 more variables: gear <dbl>, carb <dbl>
arrange排序
arrange函数用于排序,一般传入一个数据与一个排序依据变量。如果传入多个变量,则依次按顺序排列。
#将数据按照mpg从小到大排列
arrange(data,mpg)
# A tibble: 32 x 12
rownames mpg cyl disp hp drat wt qsec vs am
<chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 Cadilla~ 10.4 8 472 205 2.93 5.25 18.0 0 0
2 Lincoln~ 10.4 8 460 215 3 5.42 17.8 0 0
3 Camaro ~ 13.3 8 350 245 3.73 3.84 15.4 0 0
4 Duster ~ 14.3 8 360 245 3.21 3.57 15.8 0 0
5 Chrysle~ 14.7 8 440 230 3.23 5.34 17.4 0 0
6 Maserat~ 15 8 301 335 3.54 3.57 14.6 0 1
7 Merc 45~ 15.2 8 276. 180 3.07 3.78 18 0 0
8 AMC Jav~ 15.2 8 304 150 3.15 3.44 17.3 0 0
9 Dodge C~ 15.5 8 318 150 2.76 3.52 16.9 0 0
10 Ford Pa~ 15.8 8 351 264 4.22 3.17 14.5 0 1
# ... with 22 more rows, and 2 more variables: gear <dbl>, carb <dbl>
结合desc()
函数可以由大到小降序排列
arrange(data,desc(mpg))
# A tibble: 32 x 12
rownames mpg cyl disp hp drat wt qsec vs am
<chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 Toyota ~ 33.9 4 71.1 65 4.22 1.84 19.9 1 1
2 Fiat 128 32.4 4 78.7 66 4.08 2.2 19.5 1 1
3 Honda C~ 30.4 4 75.7 52 4.93 1.62 18.5 1 1
4 Lotus E~ 30.4 4 95.1 113 3.77 1.51 16.9 1 1
5 Fiat X1~ 27.3 4 79 66 4.08 1.94 18.9 1 1
6 Porsche~ 26 4 120. 91 4.43 2.14 16.7 0 1
7 Merc 24~ 24.4 4 147. 62 3.69 3.19 20 1 0
8 Datsun ~ 22.8 4 108 93 3.85 2.32 18.6 1 1
9 Merc 230 22.8 4 141. 95 3.92 3.15 22.9 1 0
10 Toyota ~ 21.5 4 120. 97 3.7 2.46 20.0 1 0
# ... with 22 more rows, and 2 more variables: gear <dbl>, carb <dbl>
如果数据中存在缺失值
,那么含有缺失值的个案总是排序在最后面
。
select选择变量
使用select函数可以很方便找出你所需要的变量。
select函数支持用:
范围选择变量。
如果要选择的变量名在一个向量里,可以使用one_of
函数相对于%in%
#选择data数据集hp到wt之间的变量包括两端
select(data,hp:wt)
# A tibble: 32 x 3
hp drat wt
<dbl> <dbl> <dbl>
1 110 3.9 2.62
2 110 3.9 2.88
3 93 3.85 2.32
4 110 3.08 3.22
5 175 3.15 3.44
6 105 2.76 3.46
7 245 3.21 3.57
8 62 3.69 3.19
9 95 3.92 3.15
10 123 3.92 3.44
# ... with 22 more rows
#使用one_of函数
a <- c('vs','am')
select(data,one_of(a))
# A tibble: 32 x 2
vs am
<dbl> <dbl>
1 0 1
2 0 1
3 1 1
4 1 0
5 0 0
6 1 0
7 0 0
8 1 0
9 1 0
10 1 0
# ... with 22 more rows
select
支持以变量名选择变量,相关函数有:
- starts_with(‘a’):选择变量名以a开头的变量
- ends_with(‘a’):选择变量名以a结尾的变量
- contains(‘a’):选择变量名包含a的变量
- matches():使用正则表达式匹配
- num_range(‘a’,1:3):匹配a1、a2、a3
还可以结合everything()
函数改变变量的位置,将变量放在开头:
select(data,hp,everything())
rename变量重命名
它的格式为:
rename(data,new_name = old_name)
如果同时修改多个变量,按照上述方法输入即可。
rename(data,new_name = old_name,new_name = old_name)
rename(data,dis = disp)
# A tibble: 32 x 12
rownames mpg cyl dis hp drat wt qsec vs am
<chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 Mazda R~ 21 6 160 110 3.9 2.62 16.5 0 1
2 Mazda R~ 21 6 160 110 3.9 2.88 17.0 0 1
3 Datsun ~ 22.8 4 108 93 3.85 2.32 18.6 1 1
4 Hornet ~ 21.4 6 258 110 3.08 3.22 19.4 1 0
5 Hornet ~ 18.7 8 360 175 3.15 3.44 17.0 0 0
6 Valiant 18.1 6 225 105 2.76 3.46 20.2 1 0
7 Duster ~ 14.3 8 360 245 3.21 3.57 15.8 0 0
8 Merc 24~ 24.4 4 147. 62 3.69 3.19 20 1 0
9 Merc 230 22.8 4 141. 95 3.92 3.15 22.9 1 0
10 Merc 280 19.2 6 168. 123 3.92 3.44 18.3 1 0
# ... with 22 more rows, and 2 more variables: gear <dbl>, carb <dbl>
mutate创建新变量
mutate
函数用于创建新变量,不同于R语言自带函数transmulate
(不保留原有变量),mutate
保留旧变量。
#这里新创建的变量在最后面,所以不显示。
mutate(data,a = mpg/disp)
# A tibble: 32 x 13
rownames mpg cyl disp hp drat wt qsec vs am
<chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 Mazda R~ 21 6 160 110 3.9 2.62 16.5 0 1
2 Mazda R~ 21 6 160 110 3.9 2.88 17.0 0 1
3 Datsun ~ 22.8 4 108 93 3.85 2.32 18.6 1 1
4 Hornet ~ 21.4 6 258 110 3.08 3.22 19.4 1 0
5 Hornet ~ 18.7 8 360 175 3.15 3.44 17.0 0 0
6 Valiant 18.1 6 225 105 2.76 3.46 20.2 1 0
7 Duster ~ 14.3 8 360 245 3.21 3.57 15.8 0 0
8 Merc 24~ 24.4 4 147. 62 3.69 3.19 20 1 0
9 Merc 230 22.8 4 141. 95 3.92 3.15 22.9 1 0
10 Merc 280 19.2 6 168. 123 3.92 3.44 18.3 1 0
# ... with 22 more rows, and 3 more variables: gear <dbl>,
# carb <dbl>, a <dbl>
如果只想保留新变量,则使用transmute
函数。
summarize汇总变量
summarize
函数提供数据汇总功能
#汇总mpg的平均数
summarise(data,mpg = mean(mpg))
# A tibble: 1 x 1
mpg
<dbl>
1 20.1
结合group_by
函数进行分组汇总
#将数据data按照cyl分组求mpg的平均值
data %>%
group_by(cyl) %>%
summarise(mpg = mean(mpg))
# A tibble: 3 x 2
cyl mpg
<dbl> <dbl>
1 4 26.7
2 6 19.7
3 8 15.1
结合n
函数汇总变量数量
支持管道函数
data %>%
group_by(cyl) %>%
summarise(n())
# A tibble: 3 x 2
cyl `n()`
<dbl> <int>
1 4 11
2 6 7
3 8 14
这些基础函数多数又基于数据处理的便捷性。创造了一系列以all、at、if为后缀的函数,可以在各种条件下进行相应的数据处理。
另外,dplyr包还有一系列支持关系型数据库的函数。
R
语
言
小
白
速
通
R语言小白速通
R语言小白速通
懂
点
R
语
言
懂点R语言
懂点R语言
欢
迎
分
享
收
藏
关
注
欢迎分享收藏关注
欢迎分享收藏关注