阅读 57

第三章 使用dplyr进行数据转换

加载 tidyverse 时,仔细查看输出的冲突信息,它会告诉你 dplyr 覆盖了基础 R 包中的哪些函数。如果想要在加载 dplyr 后使用这些函数的基础版本,那么你应该使用它们的完整名称: stats::filter() 和 stats::lag()。
• int 表示整数型变量。
• dbl 表示双精度浮点数型变量,或称实数。
• chr 表示字符向量,或称字符串。
• dttm 表示日期时间(日期 + 时间)型变量。
• lgl 表示逻辑型变量,是一个仅包括 TRUE 和 FALSE 的向量。
• fctr 表示因子, R 用其来表示具有固定数目的值的分类变量。
• date 表示日期型变量。
dplyr基础
5 个 dplyr 核心函数:
• 按值筛选观测(filter())。
• 对行进行重新排序(arrange())。
• 按名称选取变量(select())。
• 使用现有变量的函数创建新变量(mutate())。
• 将多个值总结为一个摘要统计量(summarize())。
5 个函数的工作方式都是相同的:
(1) 第一个参数是一个数据框。
(2) 随后的参数使用变量名称(不带引号)描述了在数据框上进行的操作。
(3) 输出结果是一个新数据框。
这些函数都可以和 group_by() 函数联合起来使用, group_by() 函数可以改变以上每个函数的作用范围,让其从在整个数据集上操作变为在每个分组上分别操作。
使用filter()筛选行
filter() 函数可以基于观测的值筛选出一个观测子集。第一个参数是数据框名称,第二个参数以及随后的参数是用来筛选数据框的表达式。


比较运算符
比较运算符: >、 >=、 <、 <=、 !=(不等于)和 ==(等于)。
比较浮点数是否相等时,不能使用 ==,而应该使用 near():


逻辑运算符
布尔运算符: & 表示“与”、 | 表示“或”、 ! 表示“非”:



缺失值
确定一个值是否为缺失值,可以使用 is.na() 函数:


filter() 只能筛选出条件为 TRUE 的行;它会排除那些条件为 FALSE 和 NA 的行:


使用arrange()排列行
arrange() 函数的工作方式与 filter() 函数非常相似,但前者不是选择行,而是改变行的顺序。它接受一个数据框和一组作为排序依据的列名(或者更复杂的表达式)作为参数。如果列名不只一个,那么就使用后面的列在前面排序的基础上继续排序,注:默认缺失值排在最后。


使用 desc() 可以按列进行降序排序:


使用select()选择列
select()可以用于选择自己需要的列作为子集,然后用于分析:




select () 函数的一些辅助函数:
• starts_with("abc"):匹配以“abc”开头的名称。
• ends_with("xyz"):匹配以“xyz”结尾的名称。
• contains("ijk"):匹配包含“ijk”的名称。
• matches("(.)\1"):选择匹配正则表达式的那些变量。这个正则表达式会匹配名称中有
重复字符的变量。你将在第 10 章中学习到更多关于正则表达式的知识。
• num_range("x", 1:3):匹配 x1、 x2 和 x3。
select() 可以重命名变量,但我们很少这样使用它,因为这样会丢掉所有未明确提及的变量。我们应该使用 select() 函数的变体 rename() 函数来重命名变量,以保留所有未明确提及的变量:


select() 函数和 everything() 辅助函数结合起来使用。可以将几个变量移到数据框开头时,这种用法非常奏效:


使用mutate()添加新变量
mutate()函数可用于添加新的列。
.after = X 添加在X列的后面 .before = Y 添加在Y列的前面


如果只想保留新变量,可以使用 transmute() 函数:


常用创建函数
算术运算符: +、 -、 *、 /、 ^


模运算符: %/% 和 %%


对数函数: log()、 log2() 和 log10()
偏移函数:lead() 和 lag() 函数可以返回一个序列的领先值和滞后值。


累加和滚动聚合:R 提供了计算累加和、累加积、累加最小值和累加最大值的函数: cumsum()、 cumprod()、commin() 和 cummax(); dplyr 还提供了 cummean() 函数以计算累加均值。如果想要计算滚动聚合(即滚动窗口求和),那么可以尝试使用 RcppRoll 包:


逻辑比较: <、 <=、 >、 >= 和 !=


使用summarize()进行分组摘要
查看数据摘要。
使用管道组合多种操作
管道命令: %>%,使用这种方法时, x %>% f(y) 会转换为 f(x, y), x %>% f(y) %>% g(z) 会转换为 g(f(x,y), z),以此类推。



等价于

缺失值
na.rm = TRUE表示移除缺失值。


计数
n()函数表示计数。
常用的摘要函数
位置度量:median(x)中位值
分散程度度量: sd(x)、 IQR(x) 和 mad(x)。均方误差(又称标准误差, standard deviation, sd)是分散程度的标准度量方式。四分位距 IQR() 和绝对中位差 mad(x) 基本等价。
秩的度量: min(x)、 quantile(x, 0.25) 和 max(x)。quantile(x, 0.25) 会找出 x 中按从小到大顺序大于前25% 而小于后 75% 的值。
定位度量: first(x)、 nth(x, 2) 和 last(x)。这几个函数的作用与 x[1]、 x[2] 和 x[length(x)] 相同,只是当定位不存在时(比如尝试从只有两个元素的分组中得到第三个元素),前者允许你设置一个默认值。
计数:n(),sum(!is.na(x))可以计算出非缺失值的数量,n_distinct(x)可以计算出唯一值的数量。
逻辑值的计数和比例: sum(x > 10) 和 mean(y == 0)。当与数值型函数一同使用时, TRUE 会转换为 1, FALSE 会转换为 0。
按多个变量分组
当使用多个变量进行分组时,每次的摘要统计会用掉一个分组变量。



取消分组
如果想要取消分组,并回到未分组的数据继续操作,那么可以使用 ungroup() 函数:


分组新变量(和筛选器)
分组筛选器的作用相当于分组新变量加上未分组筛选器。


附:dplry深度学习
筛选:filter
filter()函数k可以按照给定的逻辑条件筛选出符合要求的子数据集,返回与输入数据相同的数据类型,支持对同一对象的任意条件组合。
语法:
filter(data,条件)





排序:arrange
arrange()函数按照给定的列对数据进行排序,默认是按照升序排序,也可以使用desc()实现降序排序。可以对多个列进行排序,用逗号分隔。
语法:
arrange(data,col_name)



选择:select
select()按照列名选择子数据集,可以结合特定函数使用:
ends_with():选择以指定字符结尾的列
starts_with():选择以指定字符开头的列
contains():选择包含指定字符的列
one_of():选择列名为指定字符的列
num_range():选择组合字符指定的列
everything():选择所有的列,一般不用于选择,而是用于修改列的顺序
语法:
select(data,col_names)







重命名:rename
rename()函数的使用方法和select一样,唯一不同的是rename()函数可以对列进行重命名后返回的是全部列,而不是只返回重命名的列。
语法:
rename(data,new_name=old_name)


变形:mutate
mutate()函数可以对已有的列进行数据运算并添加为新的列,mutate的结果会保留原有变量。
语法:
mutate(data,…)


去重:distinct
distinct()用于对输入的数据进行去重,返回无重复的行。
语法:
distinct(.data, ..., .keep_all = FALSE)



概要:summarise
sunmmarise()可以对数据框进行汇总操作,返回一维结果。
语法:
summarise(.data, ...)
summarise主要支持以下几种公式 :
mean()、 median()
sd()、 IQR()、 mad()
min()、 max()、 quantile()
first()、 last()、 nth()
n()、 n_distinct()
any()、 all()


抽样:sample
用于对数据进行抽样的函数,sample_n()抽取指定数量的样本,sample_frac()抽取指定百分比的样本,默认为不放回抽样,可以通过设置replacement=TRUE改为放回抽样。
语法:
sample_n(tbl, size, replace = FALSE, weight = NULL, .env = parent.frame())
sample_frac(tbl, size = 1, replace = FALSE, weight = NULL,.env = parent.frame())








分组:group_by
group_by()用于对数据集按照给定变量分组,返回分组后的数据集,使用以上的函数对分组数据进行操作时,会自动对分组数据进行操作。
语法:
group_by(data, ..., add = FALSE)










条件语句:ifelse
语法:
if_else(condition,true, false, missing = NULL)



作者:护旗小能手

原文链接:https://www.jianshu.com/p/872d53087605

文章分类
后端
文章标签
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐