使用 Dplyr 进行数据处理
介绍
在处理数据时,重要的是要知道你想用你拥有的大量信息做什么。为了从数据中找出事实,一定程度的操作是必要的,因为很少能以完全正确的形式获得数据。
为了在 R 中执行操作,dplyr 包可以提供帮助。它提供了一组用于数据操作活动的函数。
# The easiest way to install dplyr is to install the whole tidyverse
install.packages("tidyverse")
# Alternate way to install only dplyr
install.packages("dplyr")
概述
dplyr 的
dplyr 提供了一组一致的函数来解决数据操作问题。其中包括:
- filter():根据值选择记录
- 安排():重新排序
- select():从数据集中选择变量
- mutate():添加新变量
- summary():将多个值压缩为一个
- group_by():将数据集分解为指定的行组
管道操作员
每个数据操作活动都不会简单地使用一两个函数。为了使代码易于阅读,dplyr 使用了magrittr 中的%>%(管道运算符),它将x%>%f(x)转换为f(x, y)。我们将使用此运算符来帮助解释 dplyr。
处理数据
要探索 dplyr 的功能,我们需要一个数据集。我们将使用 nycflights13 包中的航班数据集,其中包含几个有用的数据集。
# Installing nycflights13 package
install.packages("nycflights13")
library(nycflights13)
data(flights)
# looking into sample data
head(flights)
# A tibble: 6 x 19
year month day dep_time sched_dep_time dep_delay arr_time sched_arr_time arr_delay carrier flight tailnum origin dest
<int> <int> <int> <int> <int> <dbl> <int> <int> <dbl> <chr> <int> <chr> <chr> <chr>
1 2013 1 1 517 515 2 830 819 11 UA 1545 N14228 EWR IAH
2 2013 1 1 533 529 4 850 830 20 UA 1714 N24211 LGA IAH
3 2013 1 1 542 540 2 923 850 33 AA 1141 N619AA JFK MIA
4 2013 1 1 544 545 -1 1004 1022 -18 B6 725 N804JB JFK BQN
5 2013 1 1 554 600 -6 812 837 -25 DL 461 N668DN LGA ATL
6 2013 1 1 554 558 -4 740 728 12 UA 1696 N39463 EWR ORD
# ... with 5 more variables: air_time <dbl>, distance <dbl>, hour <dbl>, minute <dbl>, time_hour <dttm>
过滤行
要从主数据集中获取行的子集,请使用filter()函数。此函数将数据框作为第一个参数,后续参数是过滤数据框的表达式。
# loading dplyr library
library(dplyr)
# filtering flights dataframe on year
filter(flights, year ==2013)
# adding more expression for year and month
filter(flights, year = 2013, month = 1)
过滤表达式以AND运算形式应用。
排列行
排列()函数的工作原理与筛选 ()类似,不同之处在于它排列数据框的行。该函数的第一个参数是数据框名称,后续参数是列名。
# arranging the flights dataframe on year
arrange(flights, year)
# arranging dataframe on multiple columns
arrange(flights, year, month, day)
# The default order of arrange() function is ascending if we want, we can arrange in descending order
arrange(flights, desc(year))
当提供多列时,每列都会破坏前一列行的排列。
选择列
如果您只对数据集的几列感兴趣,请使用select()函数提取它们。第一个参数是数据框的名称,后续参数是列或表达式的名称。
# selecting columns through their names
select(flights, year, month, day)
# selecting columns with expressions
select(flights, starts_with("arr"))
添加新列
要添加作为数据框中现有列函数的新列,请使用mutate()函数。mutate 函数的第一个参数是数据框的名称,后续参数是新列的公式。
# The flights dataset has distance and air_time, so we will add speed in the dataframe
mutate(flights, speed = distance/air_time)
这将在航班数据框中创建一个新的列“速度” 。
汇总值
汇总数据有助于做出难以通过大量信息做出正确决定的决策。汇总功能在这种情况下非常有用。
# lets get mean of the delay time in arrival from flights dataframe.
summarize(flights, delay = mean(arr_delay, na.rm = TRUE)
summary ()函数与group_by()函数经常一起使用,因为与group_by()一起使用时可以提供更详细的信息。
分组操作
在分组操作中,数据集分解为指定的行组。在 dplyr 中,这是通过group_by()函数完成的。该函数的第一个参数是数据框名称,后续参数是参与分组行的那些列。我们通常将group_by()函数与一些聚合函数一起使用。
# Grouping dataset in years
group_by(flights, year)
# Using along with summarize() function
summarize(group_by(flight, year), delay = mean(arr_delay, na.rm = TRUE)
在summary()函数中使用时,结果是每年arr_delay的平均值。
管道
到目前为止,我们已经单独应用了数据操作功能,但在本节中,我们将承担一项任务,其中我们必须使用多个功能并借助管道(%>%)运算符将它们组合在一起。
假设您需要根据航班数据集计算 2013 年每个月的到达和离开航班的平均延误时间。如果您阅读该语句,会发现它看起来很复杂。因此,您需要在代码部分中分解它。
# Using functions along with %>% operator
flight%>%
filter(year = 2013)%>% # First filter the required rows
select(year, month, arr_delay, dep_delay)%>% # Second selecting the necessary columns
group_by(year, month)%>% # Third grouping the rows
summarise( arrival = mean(arr_delay, na.rm = TRUE),
departure = mean(dep_delay, na.rm = TRUE)) # Fourth now calculating the columns
上面的代码使用了%>%运算符,以便您更好地理解代码。
结论
每当我们处理数据时,我们都需要进行一些操作来获取最有价值的信息。在现实生活中,数据集更加复杂并且包含大量错误,因此我们必须编写能够有效操作数据并解决错误的代码。
此外,现实生活中的数据量要大得多。如果我们理解任务并将其分解为小函数,我们就可以处理这个问题。
您可以在此处获取有关 dplyr 函数的更多信息。
免责声明:本内容来源于第三方作者授权、网友推荐或互联网整理,旨在为广大用户提供学习与参考之用。所有文本和图片版权归原创网站或作者本人所有,其观点并不代表本站立场。如有任何版权侵犯或转载不当之情况,请与我们取得联系,我们将尽快进行相关处理与修改。感谢您的理解与支持!
请先 登录后发表评论 ~