用dplyr包进行数据处理


dplyr包是tidyverse系列用于数据处理的包,常用函数有:

  • filter()选择个案
  • arrange()排序
  • select()选择变量
  • rename()变量重命名
  • mutate()创建新变量
  • summarize()汇总变量

加载包与数据

library(tidyverse)
data <- as_tibble(mtcars,rownames = 'rownames')
data
# A tibble: 32 x 12
   rownames            mpg   cyl  disp    hp  drat    wt  qsec    vs    am  gear  carb
   <chr>             <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
 1 Mazda RX4          21       6  160    110  3.9   2.62  16.5     0     1     4     4
 2 Mazda RX4 Wag      21       6  160    110  3.9   2.88  17.0     0     1     4     4
 3 Datsun 710         22.8     4  108     93  3.85  2.32  18.6     1     1     4     1
 4 Hornet 4 Drive     21.4     6  258    110  3.08  3.22  19.4     1     0     3     1
 5 Hornet Sportabout  18.7     8  360    175  3.15  3.44  17.0     0     0     3     2
 6 Valiant            18.1     6  225    105  2.76  3.46  20.2     1     0     3     1
 7 Duster 360         14.3     8  360    245  3.21  3.57  15.8     0     0     3     4
 8 Merc 240D          24.4     4  147.    62  3.69  3.19  20       1     0     4     2
 9 Merc 230           22.8     4  141.    95  3.92  3.15  22.9     1     0     4     2
10 Merc 280           19.2     6  168.   123  3.92  3.44  18.3     1     0     4     4
# ... with 22 more rows

filter选择个案

filter函数用于选择个案,它的格式为:

filter(data,...)

它支持比较运算符:>,>=,<,<=,!=,==

需要注意的是等于号为==,而不是=

同样也支持逻辑运算符:&与,|或,

#选择carb等于4的个案
filter(data,carb == 4)
# A tibble: 10 x 12
   rownames   mpg   cyl  disp    hp  drat    wt  qsec    vs    am
   <chr>    <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
 1 Mazda R~  21       6  160    110  3.9   2.62  16.5     0     1
 2 Mazda R~  21       6  160    110  3.9   2.88  17.0     0     1
 3 Duster ~  14.3     8  360    245  3.21  3.57  15.8     0     0
 4 Merc 280  19.2     6  168.   123  3.92  3.44  18.3     1     0
 5 Merc 28~  17.8     6  168.   123  3.92  3.44  18.9     1     0
 6 Cadilla~  10.4     8  472    205  2.93  5.25  18.0     0     0
 7 Lincoln~  10.4     8  460    215  3     5.42  17.8     0     0
 8 Chrysle~  14.7     8  440    230  3.23  5.34  17.4     0     0
 9 Camaro ~  13.3     8  350    245  3.73  3.84  15.4     0     0
10 Ford Pa~  15.8     8  351    264  4.22  3.17  14.5     0     1
# ... with 2 more variables: gear <dbl>, carb <dbl>

#选择mpg大于15的个案
filter(data,mpg >15)
# A tibble: 26 x 12
   rownames   mpg   cyl  disp    hp  drat    wt  qsec    vs    am
   <chr>    <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
 1 Mazda R~  21       6  160    110  3.9   2.62  16.5     0     1
 2 Mazda R~  21       6  160    110  3.9   2.88  17.0     0     1
 3 Datsun ~  22.8     4  108     93  3.85  2.32  18.6     1     1
 4 Hornet ~  21.4     6  258    110  3.08  3.22  19.4     1     0
 5 Hornet ~  18.7     8  360    175  3.15  3.44  17.0     0     0
 6 Valiant   18.1     6  225    105  2.76  3.46  20.2     1     0
 7 Merc 24~  24.4     4  147.    62  3.69  3.19  20       1     0
 8 Merc 230  22.8     4  141.    95  3.92  3.15  22.9     1     0
 9 Merc 280  19.2     6  168.   123  3.92  3.44  18.3     1     0
10 Merc 28~  17.8     6  168.   123  3.92  3.44  18.9     1     0
# ... with 16 more rows, and 2 more variables: gear <dbl>, carb <dbl>

arrange排序

arrange函数用于排序,一般传入一个数据与一个排序依据变量。如果传入多个变量,则依次按顺序排列。

#将数据按照mpg从小到大排列
arrange(data,mpg)
# A tibble: 32 x 12
   rownames   mpg   cyl  disp    hp  drat    wt  qsec    vs    am
   <chr>    <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
 1 Cadilla~  10.4     8  472    205  2.93  5.25  18.0     0     0
 2 Lincoln~  10.4     8  460    215  3     5.42  17.8     0     0
 3 Camaro ~  13.3     8  350    245  3.73  3.84  15.4     0     0
 4 Duster ~  14.3     8  360    245  3.21  3.57  15.8     0     0
 5 Chrysle~  14.7     8  440    230  3.23  5.34  17.4     0     0
 6 Maserat~  15       8  301    335  3.54  3.57  14.6     0     1
 7 Merc 45~  15.2     8  276.   180  3.07  3.78  18       0     0
 8 AMC Jav~  15.2     8  304    150  3.15  3.44  17.3     0     0
 9 Dodge C~  15.5     8  318    150  2.76  3.52  16.9     0     0
10 Ford Pa~  15.8     8  351    264  4.22  3.17  14.5     0     1
# ... with 22 more rows, and 2 more variables: gear <dbl>, carb <dbl>

结合desc()函数可以由大到小降序排列

arrange(data,desc(mpg))
# A tibble: 32 x 12
   rownames   mpg   cyl  disp    hp  drat    wt  qsec    vs    am
   <chr>    <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
 1 Toyota ~  33.9     4  71.1    65  4.22  1.84  19.9     1     1
 2 Fiat 128  32.4     4  78.7    66  4.08  2.2   19.5     1     1
 3 Honda C~  30.4     4  75.7    52  4.93  1.62  18.5     1     1
 4 Lotus E~  30.4     4  95.1   113  3.77  1.51  16.9     1     1
 5 Fiat X1~  27.3     4  79      66  4.08  1.94  18.9     1     1
 6 Porsche~  26       4 120.     91  4.43  2.14  16.7     0     1
 7 Merc 24~  24.4     4 147.     62  3.69  3.19  20       1     0
 8 Datsun ~  22.8     4 108      93  3.85  2.32  18.6     1     1
 9 Merc 230  22.8     4 141.     95  3.92  3.15  22.9     1     0
10 Toyota ~  21.5     4 120.     97  3.7   2.46  20.0     1     0
# ... with 22 more rows, and 2 more variables: gear <dbl>, carb <dbl>

如果数据中存在缺失值,那么含有缺失值的个案总是排序在最后面

select选择变量

使用select函数可以很方便找出你所需要的变量。

select函数支持用:范围选择变量。

如果要选择的变量名在一个向量里,可以使用one_of函数相对于%in%

#选择data数据集hp到wt之间的变量包括两端
select(data,hp:wt)
# A tibble: 32 x 3
      hp  drat    wt
   <dbl> <dbl> <dbl>
 1   110  3.9   2.62
 2   110  3.9   2.88
 3    93  3.85  2.32
 4   110  3.08  3.22
 5   175  3.15  3.44
 6   105  2.76  3.46
 7   245  3.21  3.57
 8    62  3.69  3.19
 9    95  3.92  3.15
10   123  3.92  3.44
# ... with 22 more rows

#使用one_of函数
a <- c('vs','am')
select(data,one_of(a))
# A tibble: 32 x 2
      vs    am
   <dbl> <dbl>
 1     0     1
 2     0     1
 3     1     1
 4     1     0
 5     0     0
 6     1     0
 7     0     0
 8     1     0
 9     1     0
10     1     0
# ... with 22 more rows

select支持以变量名选择变量,相关函数有:

  • starts_with(‘a’):选择变量名以a开头的变量
  • ends_with(‘a’):选择变量名以a结尾的变量
  • contains(‘a’):选择变量名包含a的变量
  • matches():使用正则表达式匹配
  • num_range(‘a’,1:3):匹配a1、a2、a3

还可以结合everything()函数改变变量的位置,将变量放在开头:

select(data,hp,everything())

rename变量重命名

它的格式为:

rename(data,new_name = old_name)

如果同时修改多个变量,按照上述方法输入即可。

rename(data,new_name = old_name,new_name = old_name)

rename(data,dis = disp)
# A tibble: 32 x 12
   rownames   mpg   cyl   dis    hp  drat    wt  qsec    vs    am
   <chr>    <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
 1 Mazda R~  21       6  160    110  3.9   2.62  16.5     0     1
 2 Mazda R~  21       6  160    110  3.9   2.88  17.0     0     1
 3 Datsun ~  22.8     4  108     93  3.85  2.32  18.6     1     1
 4 Hornet ~  21.4     6  258    110  3.08  3.22  19.4     1     0
 5 Hornet ~  18.7     8  360    175  3.15  3.44  17.0     0     0
 6 Valiant   18.1     6  225    105  2.76  3.46  20.2     1     0
 7 Duster ~  14.3     8  360    245  3.21  3.57  15.8     0     0
 8 Merc 24~  24.4     4  147.    62  3.69  3.19  20       1     0
 9 Merc 230  22.8     4  141.    95  3.92  3.15  22.9     1     0
10 Merc 280  19.2     6  168.   123  3.92  3.44  18.3     1     0
# ... with 22 more rows, and 2 more variables: gear <dbl>, carb <dbl>

mutate创建新变量

mutate函数用于创建新变量,不同于R语言自带函数transmulate(不保留原有变量),mutate保留旧变量。

#这里新创建的变量在最后面,所以不显示。
mutate(data,a = mpg/disp)
# A tibble: 32 x 13
   rownames   mpg   cyl  disp    hp  drat    wt  qsec    vs    am
   <chr>    <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
 1 Mazda R~  21       6  160    110  3.9   2.62  16.5     0     1
 2 Mazda R~  21       6  160    110  3.9   2.88  17.0     0     1
 3 Datsun ~  22.8     4  108     93  3.85  2.32  18.6     1     1
 4 Hornet ~  21.4     6  258    110  3.08  3.22  19.4     1     0
 5 Hornet ~  18.7     8  360    175  3.15  3.44  17.0     0     0
 6 Valiant   18.1     6  225    105  2.76  3.46  20.2     1     0
 7 Duster ~  14.3     8  360    245  3.21  3.57  15.8     0     0
 8 Merc 24~  24.4     4  147.    62  3.69  3.19  20       1     0
 9 Merc 230  22.8     4  141.    95  3.92  3.15  22.9     1     0
10 Merc 280  19.2     6  168.   123  3.92  3.44  18.3     1     0
# ... with 22 more rows, and 3 more variables: gear <dbl>,
#   carb <dbl>, a <dbl>

如果只想保留新变量,则使用transmute函数。

summarize汇总变量

summarize函数提供数据汇总功能

#汇总mpg的平均数
summarise(data,mpg = mean(mpg))
# A tibble: 1 x 1
    mpg
  <dbl>
1  20.1

结合group_by函数进行分组汇总

#将数据data按照cyl分组求mpg的平均值
data %>% 
     group_by(cyl) %>% 
     summarise(mpg = mean(mpg))
# A tibble: 3 x 2
    cyl   mpg
  <dbl> <dbl>
1     4  26.7
2     6  19.7
3     8  15.1

结合n函数汇总变量数量

支持管道函数

data %>% 
     group_by(cyl) %>% 
     summarise(n())
# A tibble: 3 x 2
    cyl `n()`
  <dbl> <int>
1     4    11
2     6     7
3     8    14

这些基础函数多数又基于数据处理的便捷性。创造了一系列以all、at、if为后缀的函数,可以在各种条件下进行相应的数据处理。

另外,dplyr包还有一系列支持关系型数据库的函数。


xiexie
R 语 言 小 白 速 通 R语言小白速通 R
懂 点 R 语 言 懂点R语言 R
欢 迎 分 享 收 藏 关 注 欢迎分享收藏关注

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值