R(6): 数据处理包dplyr

    dplyr包是Hadley Wickham的新做,主要用于数据清洗和整理,该包专一dataframe数据格式,从而大幅提升了数据处理速度,而且提供了与其它数据库的接口,本节学习dplyr包函数基本用法。dplyr()可以使用%>%(链式操做),其功能是用于实现将一个函数的输出传递给下一个函数的第一个参数。注意,传递给下一个函数的第一个参数,那么下一个函数的第一个参数就不用写。正则表达式

目录:数据库

  • 筛选: filter()
  • 排列: arrange()
  • 选择: select()
  • 变形: mutate()
  • 汇总: summarise()
  • 分组: group_by()
  • 数据关连
  • bind

筛选: filter()函数


  •  dplyr包安装及载入,使用datasets包中的mtcars数据集作演示,首先将过长的数据整理成友好的tbl_df数据:
    install.packages("dplyr")
    library(dplyr)
    mtcars_df = tbl_df(mtcars)
  • 按给定的逻辑判断筛选出符合要求的子数据集
  • 注意:只能将指定条件的观测筛选出来,为了弥补这个缺陷,可使用select()函数筛选指定的变量,并且比subset()函数更灵活,并且选择变量的同时也能够从新命名变量。若是剔除某些变量的话,只需在变量前加上负号“-”。之因此说他比subset()函数灵活,是由于能够在select()函数传递以下参数:
    1. starts_with(x, ignor.case = TRUE)#选择以字符x开头的变量
    2. ends_with(x, ignor.case = TRUE)#选择以字符x结尾的变量
    3. contains(x, ignor.case = TRUE)#选择全部包含x的变量
    4. matches(x, ignor.case = TRUE)#选择匹配正则表达式的变量
    5. num_range('x', 1:5, width = 2)#选择x01到x05的变量
    6. one_of('x','y','z')#选择包含在声明变量中的
    7. everything()#选择全部变量,通常调整数据集中变量顺序时使用
  • > filter(mtcars_df, hp<110 & vs == 1)
    # A tibble: 10 × 11
         mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb
       <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
    1   22.8     4 108.0    93  3.85 2.320 18.61     1     1     4     1
    2   18.1     6 225.0   105  2.76 3.460 20.22     1     0     3     1
    3   24.4     4 146.7    62  3.69 3.190 20.00     1     0     4     2
    4   22.8     4 140.8    95  3.92 3.150 22.90     1     0     4     2

排列: arrange()学习


  • 按给定的列名依次对行进行排序:
    > a <- head(mtcars_df,2)
    > a
    # A tibble: 2 × 11
        mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb
      <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
    1    21     6   160   110   3.9 2.620 16.46     0     1     4     4
    2    21     6   160   110   3.9 2.875 17.02     0     1     4     4
    > arrange(a,desc(wt,qsec))
    # A tibble: 2 × 11
        mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb
      <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
    1    21     6   160   110   3.9 2.875 17.02     0     1     4     4
    2    21     6   160   110   3.9 2.620 16.46     0     1     4     4
    > arrange(a,wt,qsec)
    # A tibble: 2 × 11
        mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb
      <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
    1    21     6   160   110   3.9 2.620 16.46     0     1     4     4
    2    21     6   160   110   3.9 2.875 17.02     0     1     4     4

选择: select()spa


  • 用列名做参数来选择子数据集:
    > mtcars_df %>% select(mpg,wt,qsec)
    # A tibble: 32 × 3
         mpg    wt  qsec
    *  <dbl> <dbl> <dbl>
    1   21.0 2.620 16.46
    2   21.0 2.875 17.02

变形: mutate()code


  • 对已有列进行数据运算并添加为新列:
    > mutate(mtcars_df, NO = 1:dim(mtcars_df)[1])
    # A tibble: 32 × 12
         mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb    NO
       <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <int>
    1   21.0     6 160.0   110  3.90 2.620 16.46     0     1     4     4     1
    2   21.0     6 160.0   110  3.90 2.875 17.02     0     1     4     4     2
    3   22.8     4 108.0    93  3.85 2.320 18.61     1     1     4     1     3
    4   21.4     6 258.0   110  3.08 3.215 19.44     1     0     3     1     4
    5   18.7     8 360.0   175  3.15 3.440 17.02     0     0     3     2     5
    6   18.1     6 225.0   105  2.76 3.460 20.22     1     0     3     1     6

汇总: summarise()对象


  • 对数据框调用其它函数进行汇总操做, 返回一维的结果:
    > summarise(mtcars, mean(disp))
      mean(disp)
    1   230.7219
    > summarise(group_by(mtcars, cyl), mean(disp))
    # A tibble: 3 × 2
        cyl `mean(disp)`
      <dbl>        <dbl>
    1     4     105.1364
    2     6     183.3143
    3     8     353.1000
  • 能够用来聚合的函数有:  
    1. min():返回最小值
    2. max():返回最大值
    3. mean():返回均值
    4. sum():返回总和
    5. sd():返回标准差
    6. median():返回中位数
    7. IQR():返回四分位极差
    8. n():返回观测个数
    9. n_distinct():返回不一样的观测个数
    10. first():返回第一个观测
    11. last():返回最后一个观测
    12. nth():返回n个观测

分组: group_by()blog


  • 当对数据集经过group_by()添加了分组信息后,mutate(),arrange() 和 summarise() 函数会自动对这些 tbl 类数据执行分组操做。
    > cars <- group_by(mtcars_df, cyl)
    > summarise(cars, count = n()) # count = n()用来计算次数
    # A tibble: 3 × 2
        cyl count
      <dbl> <int>
    1     4    11
    2     6     7
    3     8    14

 数据关连排序


  • 数据库中常常须要将多个表进行链接操做,如左链接、右链接、内链接等,这里dplyr包也提供了数据集的链接操做,具体以下
    1. left_join(a, b, by="x1")
    2. right_join(a, b, by="x1")
    3. inner_join(a, b, by="x1")
    4. outer_join(a, b, by="x1")
    5. semi_join(a, b, by="x1") # 数据集a中能与数据集b匹配的记录
    6. anti_join(a, b, by="x1") # 数据集a中雨数据集b不匹配的记录
    7. intersect(x, y): x 和 y 的交集(按行)
    8. union(x, y): x 和 y 的并集(按行)
    9. setdiff(x, y): x 和 y 的补集 (在x中不在y中)

bind接口


    • 在R基础包里有cbind()函数和rbind()函数实现按列的方向进行数据合并和按行的方向进行数据合并,而在dplyr包中也添加了相似功能的函数,它们是bind_cols()函数和bind_rows()函数
    • bind_rows()函数须要两个数据框或tbl对象有相同的列数,而bind_cols()函数则须要两个数据框或tbl对象有相同的行数。
      mydf1 <- data.frame(x = c(1,2,3,4), y = c(10,20,30,40))
      mydf2 <- data.frame(x = c(5,6), y = c(50,60))
      mydf3 <- data.frame(z = c(100,200,300,400))
      bind_rows(mydf1, mydf2)
      bind_cols(mydf1, mydf3)
相关文章
相关标签/搜索