语法管道操作基础dplyr(变量数据操作语法管道)

可视化是产生洞察力的重要工具,但很少能以所需的准确形式获得数据。
通常,您需要创建一些新的变量或摘要,或者您可能只想重命名变量或重新排序观测,以使数据更易于使用。
本文章将教您如何使用dplyr包和2013年从纽约出发的航班的新数据集转换数据。
为了探索dplyr的基本数据操作,我们将使用nycflights13::flights。
这个数据框包含了2013年从纽约出发的所有336,776个航班。
数据来自美国运输统计局,可以用?flights查看帮助文件。
library(nycflights13)library(tidyverse)flights您可能会注意到,此数据框打印的内容与您过去可能使用的其他数据框略有不同:它只显示适合一个屏幕的前几行和所有列。
(要查看整个数据集,可以运行View(flights),这将在RStudio查看器中打开数据集。
)。
它的打印方式不同,因为它是tibble的。
tibble也是数据框,但稍微进行了调整,以便在整齐的格式中更好地工作。
您可能还注意到列名下面一行三个(或四个)字母的缩写。
它们描述了每个变量的类型:int:代表整数。
dbl:代表双精度,或实数。
chr:代表字符向量或字符串。
dttm:代表日期-时间(日期+时间)。
lgl:代表只包含TRUE或FALSE的逻辑向量。
fctr:代表因子,R用它来表示具有固定可能值的分类变量。
date:代表日期。
dplyr基础在本文章中,您将学习能解决绝大多数数据操作挑战的五个关键dplyr函数:根据观测值选择观测值(filter())。
重新排序行(arrange())。
按名称选择变量(select())。
使用现有变量的函数创建新变量(mutate())。
将多个值折叠为单个摘要(summarize())。
这些都可以与group_by()结合使用,后者将每个函数的作用域从操作整个数据集更改为逐个组操作。
这六个函数为数据操作语言提供了动词。
所有动词的工作方式都相似:1.第一个参数是数据框。
2.后续参数使用变量名(不带引号)描述如何处理数据框。
3.结果是一个新的数据框。
将这些属性结合在一起,可以轻松地将多个简单步骤链接在一起,以实现复杂的结果。
让我们深入研究一下这些动词是如何工作的。
使用filter()筛选行filter()允许您根据它们的值设置观测值的子集。
第一个参数是数据框的名称。
第二个和后续参数是筛选数据框的表达式。
例如,我们可以使用以下命令选择1月1日的所有航班:filter(flights, month == 1, day == 1)可以将筛选结果赋值给变量:jan1 <- filter(flights, month == 1, day == 1)也可以在赋值的同时打印筛选结果:(dec25 <- filter(flights, month == 12, day == 25))可以通过比较运算符(>, >=, <, <=, != , ==)以及逻辑运算符(&, |, !)设置复杂的筛选条件:filter(flights, month == 11 | month == 12)nov_dec <- filter(flights, month %in% c(11, 12))filter(flights, !(arr_delay > 120 | dep_delay > 120))filter(flights, arr_delay <= 120, dep_delay <= 120)使用arrange()排列行arrange()的工作方式类似于filter(),不同之处在于它不是选择行,而是更改它们的顺序。
它需要一个数据框和一组列名(或更复杂的表达式)来排序。
如果提供多个列名,则每个额外的列都将用于打破前面列的值的关联:arrange(flights, year, month, day)使用desc()按列降序重新排序:arrange(flights, desc(arr_delay))注意,缺少的值始终在排序列的末尾。
使用select()选择列获得包含数百甚至数千个变量的数据集的情况并不少见。
在这种情况下,第一个挑战通常是缩小您实际感兴趣的变量的范围。
select()允许您使用基于变量名称的操作快速放大有用的子集。
select()对飞行数据并不是特别有用,因为我们只有19个变量,但是您仍然可以了解大致情况:# Select columns by nameselect(flights, year, month, day)# Select all columns except those from year to day (inclusive)select(flights, -(year:day))您可以在select()中使用许多帮助函数:starts_with("abc"):匹配以“abc”开头的名称。
ends_with("xyz"):匹配以“xyz”结尾的名称。
contains("ijk"):匹配包含“ijk”的名称。
matches("(.)\\1"):选择与正则表达式匹配的变量。
此参数匹配任何包含重复字符的变量。
num_range("x", 1:3):匹配x1、x2和x3。
请?select选择以了解更多详细信息。
select()可用于重命名变量,但很少会这样用,因为它会删除所有未明确提到的变量。
相反,可以使用rename(),它是select()的变体,它保留所有未明确提到的变量:rename(flights, tail_num = tailnum)另一种选择是将select()与everything()帮助器结合使用。
如果您有几个要移动到数据框开头的变量,这将非常有用:select(flights, time_hour, air_time, everything())使用mutate()添加新变量除了选择现有列的集合之外,也有必要添加新列,通常可以用现有列的函数转换得到。
这就是mutate()的工作。
mutate()总是在数据集的末尾添加新列,因此我们将从创建一个更窄的数据集开始,这样我们就可以看到新的变量。
请记住,当您在RStudio中时,查看所有列的最简单方法是View():flights_sml <- select(flights, year:day, ends_with("delay"), distance, air_time)mutate(flights_sml, gain = arr_delay - dep_delay, speed = distance / air_time 60)请注意,您可以引用刚刚创建的列:mutate(flights_sml, gain = arr_delay - dep_delay, hours = air_time / 60, gain_per_hour = gain / hours)如果只想保留新变量,请使用transmute():transmute(flights, gain = arr_delay - dep_delay, hours = air_time / 60, gain_per_hour = gain / hours)有用的创建函数有许多用于创建新变量的函数,您可以将它们与mutate()一起使用。
关键属性是函数必须向量化:它必须将值的向量作为输入,并返回具有与输出相同数量的值的向量。
没有办法列出您可能使用的每一个可能的函数,但以下是一些经常有用的函数:算数运算符 +, -, , /, ^模算术 (%/% and %%),%/%(整数除法)和%%(余数)对数 log(), log2(), log10()偏移 lead()和lag() 允许您引用超前值或滞后值。
这允许您计算运行差异(例如,x - lag(x))或查找值何时更改(x != lag(x))。
它们与group_by()配合使用最为有用,您很快就会了解到这一点:(x <- 1:10)lag(x)lead(x)累积和滚动汇总R提供用于运行总和,乘积,最小值和最大值:cumsum(),cumprod(),cummin(),cummax(); dplyr提供cummean()以获得累积平均值。
如果您需要滚动汇总(即,通过滚动窗口计算得出的总和),请尝试RcppRoll软件包:xcumsum(x)cummean(x)逻辑比较 <, <=, >, >=, !=如果您正在执行复杂的逻辑操作序列,那么将临时值存储在新变量中通常是个好主意,这样您就可以检查每个步骤是否按预期工作。
排名 有很多排名函数,但您应该从min_rank()开始。
它执行最常见类型的排名(例如,第一、第二、第三、第四)。
默认值为最小的值提供最小的排名;使用desc(x)为最大的值提供最小的排名:y <- c(1, 2, 2, NA, 3, 4)min_rank(y)min_rank(desc(y))如果min_rank()没有执行所需的操作,请查看变体row_number(),dense_rank(),percent_rank(),cume_dist()和ntile()。
有关更多详细信息,请参阅他们的帮助页面:y <- c(1, 2, 2, NA, 3, 4)row_number(y)dense_rank(y)percent_rank(y)cume_dist(y)使用summarize()实现分组摘要最后一个关键动词是summarize()。
它将数据框折叠为单行:summarize(flights, delay = mean(dep_delay, na.rm = TRUE))除非我们将其与group_by()配对,否则summarize()并不是非常有用。
这会将分析单位从完整的数据集更改为单独的组。
然后,当您在分组的数据框上使用dplyr动词时,它们将自动“按组”应用。
例如,如果我们对按日期分组的数据框应用完全相同的代码,则会得到每个日期的平均延迟:by_day <- group_by(flights, year, month, day)summarize(by_day, delay = mean(dep_delay, na.rm = TRUE))group_by()和summarize()一起提供了在使用dplyr时最常用的工具之一:分组摘要(grouped summary)。
但在dplyr最强大的功能还是体现在管道操作。
这就是下一篇的重点了。
欢迎继续关注我的作品。
请点赞!
语法管道操作基础dplyr(变量数据操作语法管道)
(图片来源网络,侵删)

联系我们

在线咨询:点击这里给我发消息