dplyr
工具包是tidyverse
系列包的重要组成部分,功能是“数据操纵”,对标于基础包中的base
包。前面已经介绍了该包用于数据预处理的主要函数和colwise/rowwise功能,本篇就来汇总一下dplyr
工具包中的函数功能。
dplyr | 数据导入和预处理的常用函数
dplyr | 提高数据处理效率!数据框的colwise和rowwise操作
library(dplyr)
选择/筛选操作分为对变量(列)的选择和对样本(行)的筛选。
select
函数用于选择变量
第一个参数为数据框,后续参数为要选择的变量名:
select(mtcars, mpg, drat)
变量名前加负号表示反向选择:
# 选择除mpg, drat外的其他变量
select(mtcars, -c(mpg, drat))
filter
函数根据一定条件筛选样本
第一个参数为数据框,第二个参数为逻辑表达式:
filter(mtcars, mpg > 20)
filter(mtcars, mpg > 20 | cyl == 6)
R语言中或、且、非等逻辑用语的符号分别为
|
、&
、!
。
select
和filter
函数对标于base
包中的同一个函数subset
subset(x, subset, select, ...)
subset参数实现
filter
函数的功能,select参数实现select
函数的功能。
subset(mtcars, subset = mpg > 20 | cyl == 6)
subset(mtcars, select = c(mpg, drat)) # 变量名需使用c()合并
slice
系列函数用于抽取样本(行)
该系列函数可以抽取数据框一定量(参数n)或一定比例的样本(参数prop)。
slice_head
和slice_tail
:
# 从前往后依次抽取
slice_head(mtcars, n = 5)
slice_head(mtcars, prop = 0.2)
# 从后往前依次抽取
slice_tail(mtcars, n = 5)
slice_tail(mtcars, prop = 0.2)
slice_max
和slice_min
:
# 某变量从大到小
slice_max(mtcars, mpg, n = 5)
slice_max(mtcars, mpg, prop = 0.2)
# 某变量从小到大
slice_min(mtcars, mpg, n = 5)
slice_min(mtcars, mpg, prop = 0.2)
slice_sample
:
# 无放回随机抽取
slice_sample(mtcars, n = 5)
slice_sample(mtcars, prop = 0.2)
# 有放回随机抽取
slice_sample(mtcars, n = 5, replace = T)
slice_sample(mtcars, prop = 0.2, replace = T)
排序操作也分为对变量(列)的排序和对样本(行)的排序。
relocate
函数用于变量排序
relocate(.data, ..., .before = NULL, .after = NULL)
...
表示需要调整顺序的变量名;
names(mtcars)
## [1] "mpg" "cyl" "disp" "hp" "drat" "wt" "qsec" "vs" "am" "gear"
## [11] "carb"
relocate(mtcars, hp, qsec, .before = drat) %>% names()
# [1] "mpg" "cyl" "disp" "hp" "qsec" "drat" "wt" "vs" "am" "gear"
## [11] "carb"
arrange
函数根据某变量的大小对样本排序
默认排序方式为升序:
# mpg为第一排序变量,qsec为第二排序变量
arrange(mtcars, mpg, qsec)
降序需额外调用desc
函数:
arrange(mtcars, mpg, desc(qsec))
ranking
系列函数只生成顺序号但不改变样本顺序
当有重复值时,该系列函数提供了多种序号编码方式:
# 重复值中先出现的序号在前
row_number(mtcars$mpg)
# 重复值拥有一样的序号,序号不递补
min_rank(mtcars$mpg)
# 重复值拥有一样的序号,序号递补
dense_rank(mtcars$mpg)
生成顺序号的百分位:
# 相当于min_rank函数的结果转为百分比
percent_rank(mtcars$mpg)
# 序号的百分比上限
cume_dist(mtcars$mpg)
按降序编码:
row_number(desc(mtcars$mpg))
percent_rank(desc(mtcars$mpg))
以上函数对标于base
包中的rank
函数
rank(mtcars$mpg, ties.method = "first") # 相当于row_number
rank(mtcars$mpg, ties.method = "last")
rank(mtcars$mpg, ties.method = "min") # 相当于row_min
rank(mtcars$mpg, ties.method = "max")
rank(mtcars$mpg, ties.method = "average")
ntile
函数用于分段排序
该函数先将变量按大小分为若干区间(n参数),再标记各样本对应的区间序号:
ntile(mtcars$mpg, n = 5)
## [1] 3 3 4 4 3 2 1 4 4 3 2 2 2 1 1 1 1 5 5 5 4 2 2 1 3 5 5 5 2 3 1 4
这类函数在前面已经介绍了并且比较常用,这里不再赘述,只列举函数名。
bind_cols
:增加列合并,对标base
包中的cbind
函数
bind_rows
:增加行合并,对标base
包中的rbind
函数
join
系列函数,对标于base
包中的merge
函数
left_join()
:左连接,即以第一个数据框为参照
right_join()
:右连接,即以第二个数据框为参照
full_join()
:全连接,保留两个数据框所有的行,不能匹配的行对应变量记为NA
inner_join()
:内连接,只保留两个数据框能匹配的行
semi_join()
:半连接,保留第一个数据框能与第二个数据框匹配的内容,但不把第二个数据框的变量加入合并的数据框
anti_join()
:反向连接,保留第一个数据框不能与第二个数据框匹配的内容
此类函数也比较常见。在dplyr
包中分类汇总操作包括分类和汇总两个步骤。
group_by
函数用于数据分类
summarise
或summarize
函数在新数据框中汇总数据,对标于stats
包中的aggregate
函数
mutate
函数用于在原数据框中修改变量或生成新变量,在group_by
函数后使用也可实现汇总功能,对标于base
包中的transform
函数
transmute
函数只保留新生成的变量,相当于生成新数据框
summarise
函数的新数据框中除了新生成的汇总变量外,还包含分类变量;
transmute
函数的新数据框只包含新生成变量,不包含分类变量。
ungroup
函数用于解除数据分类
计数操作属于分类汇总操作的一种,这里单列。
该操作分为对各类包含的样本进行计数和对类本身进行计数两种情况。
count
函数用于对各类包含的样本进行计数
该函数计数后会生成新的数据框,类似于summarise
函数:
count(mtcars, cyl)
## cyl n
## 1 4 11
## 2 6 7
## 3 8 14
add_count
函数在原数据框中生成新变量n
记录计数结果,类似于mutate
函数:
add_count(mtcars, cyl) %>% head()
## mpg cyl disp hp drat wt qsec vs am gear carb n
## 1 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4 7
## 2 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4 7
## 3 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1 11
## 4 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1 7
## 5 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2 14
## 6 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1 7
tally
和add_tally
函数用在数据被group_by
函数分类后再对样本进行计数
# 结果同count(mtcars, cyl)
mtcars %>%
group_by(cyl) %>%
tally()
# 结果同add_count(mtcars, cyl)
mtcars %>%
group_by(cyl) %>%
add_tally()
n
函数在mutate
函数内对各类包含的样本进行计数
# 结果同add_count(mtcars, cyl)
mtcars %>%
group_by(cyl) %>%
mutate(n = n())
distinct
和n_distinct
函数对类本身进行计数
distinct
函数会删去数据框或某变量中的重复值,对标于base
包中的unique
函数:
distinct(mtcars)
distinct(mtcars, hp)
n_distinct
函数用于计算非重复值的个数,即类本身的个数:
n_distinct(mtcars$hp)
## [1] 22
往期推荐阅读:
《数据处理通识》专辑-base | 使用apply族函数进行向量化运算
《制表与可视化》专辑-ggplot2 | ggplot2作图语法入门
《数学模型》专辑-car | 线性回归(三)——残差分析和异常点检验
《地理计算与分析》专辑-spdep | 如何在R语言中计算空间自相关指数