dplyr | 数据处理函数的功能速查!dplyr工具包中的十类操作函数汇总(上篇)

dplyr工具包是tidyverse系列包的重要组成部分,功能是“数据操纵”,对标于基础包中的base包。前面已经介绍了该包用于数据预处理的主要函数和colwise/rowwise功能,本篇就来汇总一下dplyr工具包中的函数功能。

  • dplyr | 数据导入和预处理的常用函数

  • dplyr | 提高数据处理效率!数据框的colwise和rowwise操作

library(dplyr)

1  选择/筛选

选择/筛选操作分为对变量(列)的选择和对样本(行)的筛选。

  • select函数用于选择变量

第一个参数为数据框,后续参数为要选择的变量名:

select(mtcars, mpg, drat)

变量名前加负号表示反向选择:

# 选择除mpg, drat外的其他变量
select(mtcars, -c(mpg, drat))
  • filter函数根据一定条件筛选样本

第一个参数为数据框,第二个参数为逻辑表达式:

filter(mtcars, mpg > 20)
filter(mtcars, mpg > 20 | cyl == 6)
  • R语言中或、且、非等逻辑用语的符号分别为|&

  • selectfilter函数对标于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_headslice_tail

# 从前往后依次抽取
slice_head(mtcars, n = 5)
slice_head(mtcars, prop = 0.2)

# 从后往前依次抽取
slice_tail(mtcars, n = 5)
slice_tail(mtcars, prop = 0.2)

slice_maxslice_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)

2 排序

排序操作也分为对变量(列)的排序和对样本(行)的排序。

  • 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

3 合并/连接

这类函数在前面已经介绍了并且比较常用,这里不再赘述,只列举函数名。

  • bind_cols:增加列合并,对标base包中的cbind函数

  • bind_rows:增加行合并,对标base包中的rbind函数

  • join系列函数,对标于base包中的merge函数

    • left_join():左连接,即以第一个数据框为参照

    • right_join():右连接,即以第二个数据框为参照

    • full_join():全连接,保留两个数据框所有的行,不能匹配的行对应变量记为NA

    • inner_join():内连接,只保留两个数据框能匹配的行

    • semi_join():半连接,保留第一个数据框能与第二个数据框匹配的内容,但不把第二个数据框的变量加入合并的数据框

    • anti_join():反向连接,保留第一个数据框不能与第二个数据框匹配的内容

4 分类汇总

此类函数也比较常见。在dplyr包中分类汇总操作包括分类汇总两个步骤。

  • group_by函数用于数据分类

  • summarisesummarize函数在新数据框中汇总数据,对标于stats包中的aggregate函数

  • mutate函数用于在原数据框中修改变量或生成新变量,在group_by函数后使用也可实现汇总功能,对标于base包中的transform函数

  • transmute函数只保留新生成的变量,相当于生成新数据框

  • summarise函数的新数据框中除了新生成的汇总变量外,还包含分类变量;

  • transmute函数的新数据框只包含新生成变量,不包含分类变量。

  • ungroup函数用于解除数据分类

5 计数

计数操作属于分类汇总操作的一种,这里单列。

该操作分为对各类包含的样本进行计数和对类本身进行计数两种情况。

  • 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
  • tallyadd_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())
  • distinctn_distinct函数对类本身进行计数

distinct函数会删去数据框或某变量中的重复值,对标于base包中的unique函数:

distinct(mtcars)
distinct(mtcars, hp)

n_distinct函数用于计算非重复值的个数,即类本身的个数:

n_distinct(mtcars$hp)
## [1] 22

往期推荐阅读:

  • 《数据处理通识》专辑-base | 使用apply族函数进行向量化运算

  • 《制表与可视化》专辑-ggplot2 | ggplot2作图语法入门

  • 《数学模型》专辑-car | 线性回归(三)——残差分析和异常点检验

  • 《地理计算与分析》专辑-spdep | 如何在R语言中计算空间自相关指数

dplyr | 数据处理函数的功能速查!dplyr工具包中的十类操作函数汇总(上篇)_第1张图片

你可能感兴趣的:(python,编程语言,数据挖掘,大数据,java)