杭州电子商务研究院

使用 Dplyr 进行数据处理

2020-10-23 08:00飞浪

介绍

在处理数据时,重要的是要知道你想用你拥有的大量信息做什么。为了从数据中找出事实,一定程度的操作是必要的,因为很少能以完全正确的形式获得数据。

为了在 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 提供了一组一致的函数来解决数据操作问题。其中包括:

  1. filter():根据值选择记录
  2. 安排():重新排序
  3. select():从数据集中选择变量
  4. mutate():添加新变量
  5. summary():将多个值压缩为一个
  6. 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 函数的更多信息。

曝光33386浏览1767