抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

数据是 R 的主要工作对象,而数据转换是进行数据处理分析的关键步骤,也是能够判断出工作者对数据分析熟练程度的指标之一。

dplyr 基础

由于 R 对数据格式具有特定的要求,而数据来源未必符合这种要求,因此需要对数据进行转换。常见的数据转换有:创建摘要统计量、重命名、排序等。tidyverse 包中主要用来处理数据转换的包是 dplyr

dplyr 包中常用的核心函数有:

  • filter 函数:按值筛选观测
  • arrange 函数:对行重新排序
  • select 函数:按名称选取变量
  • mutate 函数:使用现有变量的函数创建新变量
  • summarize 函数:将多个值总结为一个摘要统计量

这些函数都遵循以下行为:

  1. 第一参数是一个数据框
  2. 随后的参数是变量名称
  3. 输出结果是一个新数据框,并且默认不会修改原数据框

此外,还存在一个 group_by 函数可以与上面的函数联合使用,通过改变其作用范围以达到分组操作。

筛选行

filter 函数的语法为:filter(.data, ...) 。其中 .data 为数据集,... 为返回逻辑值的判断式,可以使用的筛选函数有:

  • ==>>=
  • &|!xor()
  • is.na()
  • between()near()

near 函数可以用来判断浮点数是否相等,因为使用 == 判断浮点数是否相等时经常会判断错误,而该现象是由浮点数储存方式导致的

排列行

arrange 函数的语法为:arrange(.data, ...) 。其中 .data 为数据集,... 为排序依据的列名。

列名的数量可以有多个,并且默认排序方式为升序,在有多个列名的情况下,后面的列会在前面的列排序的基础上继续排序,可以在列名外包裹 desc() 函数来使用降序排序

缺失值 NA 总是排在最后

选择列

select 函数的语法为:select(.data, ...) 。其中 .data 为数据集,... 为需要提取的列的名称。

列名可以是单列,也可以是逗号隔开的多列,甚至可以是支持索引系统的向量

此外,该函数还支持许多辅助函数:

函数示例作用
starts_withstarts_with(“fgh”)匹配以“ fgh ”开头的列名
ends_withends_with(“lmn”)匹配以“ lmn ”结尾的列名
containscontains(“ijk”)匹配包含“ ijk ”的列名
matches匹配正则表达式的列名
num_rangenum_range(“x”, 1:3)匹配 x1,x2 和 x3

虽然 select 函数可以重命名变量,但还是推荐使用 rename 函数来完成该工作

select 函数有一个选取全部列的函数 everything ,虽然该函数看起来并没有什么具体作用,但如果想将关注的列排到最前而其他列依然保留,那么在列出关注的列的名称后使用该辅助函数就可以达成目的

select 函数并不会改变原数据集的内容,因此需要根据具体情况将该函数的值返回给新对象或原数据集

添加新变量

mutate 函数的语法为 mutate(.data, ...) 。其中 .data 为数据集,... 为新建列的名称,用 变量名 = 表达式 的方式进行初始化。

该函数并不会创建新的数据集,并且可以新加多列

如果只想保留新变量,可以使用 transmute 函数代替 mutate 函数。同样地,该函数也不会创建新的数据集

常用的创建函数如下:

算术运算符

名称作用
+加法
-减法
*乘法
/除法
^乘幂

模运算符

名称作用
%/%整数除法
%%求余

对数函数

名称作用
log()以 e 为底数的对数函数
log2()以 2 为底数的对数函数
log10()以 10 为底数的对数函数

偏移函数

名称作用
lead()返回序列的领先值
lag()返回序列的滞后值

累加和滚动聚合

名称作用
cumsum累加总和
cummean累加均值

逻辑比较

名称作用
<小于
>大于
<=小于等于
>=大于等于
==等于
!=不等于

排秩

名称作用
min_rank()按值排秩
min_rank(desc())按值逆序排秩

分组摘要

summarize 函数的语法为 summarize(.data, ..., .groups = NULL) 。其中 .data 为数据集,... 为保留列或新建列。

通常将该函数与 group_by 函数结合使用,以达到分组的目的。

管道组合

管道组合相当于连续处理,符号 %>% 用来表示管道。以下三个语句的作用是一致的:

1
2
3
> x %>% f(y) %>% g(z)
> f(x, y) %>% g(z)
> g(f(x, y), z)

缺失值

由于数据集中经常会出现 NA 值,因此对于数据处理函数需要经常附带参数 na.rm = TRUE 来删除其中的缺失值。

常用的摘要函数

位置度量

名称作用
mean(x)x 的均值
median(x)x 的中位数

分散程度度量

名称作用
sd(x)x 的均方误差
IQR(x)x 的四分位距
mad(x)x 的绝对中位差

秩的度量

名称作用
min(x)x 的最小值
quantile(x, 0.25)x 的第一四分位数(较小四分位数)
max(x)x 的最大值

quantile 函数的第二参数可以是区间 [0, 1] 中的任意值

定位度量

名称作用
first(x)x 的首元素
nth(x,2)x 的第二元素
last(x)x 的末元素

nth 函数的第二参数可以是数据集可用的整数索引

计数

名称作用
n()返回当前分组的大小
sum(!is.na(x))返回 x 非缺失值的数量
n_distinct(x)返回 x 唯一值的数量
count(x)返回 x 变量对应取值的数量

count 还可以指定参数 wt 来计算对应变量的和

逻辑值的计数和比例

当 x 为逻辑型向量时,有

名称作用
sum(x)x 中 TRUE 的数量
mean(x)x 中 TRUE 的比例

按多个变量分组

可以使用 group_by 函数给数据集分组,例如 group_by(x, a, b, c, ...) 会生成一个以变量 a ,b ,c ,… 分组的数据集(即在原数据集基础上生成具有分组的新数据集)。

summarize 函数的第一参数通常是一个已分组的数据集。在这种情况下,会生成一个摘要数据集,摘要数据集是一个新的分组数据集,并且其分组与原数据集的分组在顺序上一致,数量上少一个(少的是分组内的最后一个变量)。

对摘要数据集再次使用 summarize 函数时,会在该数据集的分组基础上再删除掉最后的变量,并生成新的摘要数据集

summarize 函数还可以包含其他参数,这时这些参数会生成新的列。

summarize 函数只会保留分组变量的列(根据情况可能还会缩进掉分组的最后一个变量),因此每次使用此函数时都要对其它的保留列做额外处理

取消分组

可以使用 ungroup 函数生成一个取消已分组数据集分组的数据集。

分组新变量(或筛选器)

mutatefilter 函数和 summarize 函数一样,也可以作用于分组数据集。

分组操作和添加新变量(或筛选器)的前后顺序不一样,结果也可能会不一样

评论



This is a picture without description

This is a picture without description This is a picture without description This is a picture without description