R数据科学整洁之道:使用dplyr操作数据表

今天为大家介绍一个 R 语言数据分析必学的包:dplyr。

dplyrtidyverse 包的一部分,提供了许多操作数据框的工具,常用的有:

  • filter 选择行
  • select 选择列
  • mutate 新增列
  • arrange 排序
  • summarize 生成摘要

这 5 个函数的工作方式都是相同的。

1、第一个参数是一个数据框。

2、随后的参数使用变量名称(不带引号)描述了在数据框上进行的操作。

3、输出结果是一个新数据框。

安装

# 最简单的方法,安装整个 tidyverse 包
install.packages("tidyverse")

# 或者,只安装 dplyr
install.packages("dplyr")

数据准备

我们用ggplot2包中的mpg数据为例,这个表记录了 234 辆汽车的品牌、型号、排量以及消耗每加仑汽油在高速公路上行驶的里程数等数据。

library(knitr)
library(dplyr)
library(ggplot2)

kable(head(mpg))
manufacturer model displ year cyl trans drv cty hwy fl class
audi a4 1.8 1999 4 auto(l5) f 18 29 p compact
audi a4 1.8 1999 4 manual(m5) f 21 29 p compact
audi a4 2.0 2008 4 manual(m6) f 20 31 p compact
audi a4 2.0 2008 4 auto(av) f 21 30 p compact
audi a4 2.8 1999 6 auto(l5) f 16 26 p compact
audi a4 2.8 1999 6 manual(m5) f 18 26 p compact

filter – 选择行

filter() 函数可以基于观测的值筛选出一个观测子集。第一个参数是数据框名称,第二个 参数以及随后的参数是用来筛选数据框的表达式。例如,以下命令会选择所有audi品牌的车:

filter(mpg, manufacturer == 'audi')
## # A tibble: 18 × 11
##    manufacturer model      displ  year   cyl trans drv     cty   hwy fl    class
##    <chr>        <chr>      <dbl> <int> <int> <chr> <chr> <int> <int> <chr> <chr>
##  1 audi         a4           1.8  1999     4 auto… f        18    29 p     comp…
##  2 audi         a4           1.8  1999     4 manu… f        21    29 p     comp…
##  3 audi         a4           2    2008     4 manu… f        20    31 p     comp…
##  4 audi         a4           2    2008     4 auto… f        21    30 p     comp…
##  5 audi         a4           2.8  1999     6 auto… f        16    26 p     comp…
##  6 audi         a4           2.8  1999     6 manu… f        18    26 p     comp…
##  7 audi         a4           3.1  2008     6 auto… f        18    27 p     comp…
##  8 audi         a4 quattro   1.8  1999     4 manu… 4        18    26 p     comp…
##  9 audi         a4 quattro   1.8  1999     4 auto… 4        16    25 p     comp…
## 10 audi         a4 quattro   2    2008     4 manu… 4        20    28 p     comp…
## 11 audi         a4 quattro   2    2008     4 auto… 4        19    27 p     comp…
## 12 audi         a4 quattro   2.8  1999     6 auto… 4        15    25 p     comp…
## 13 audi         a4 quattro   2.8  1999     6 manu… 4        17    25 p     comp…
## 14 audi         a4 quattro   3.1  2008     6 auto… 4        17    25 p     comp…
## 15 audi         a4 quattro   3.1  2008     6 manu… 4        15    25 p     comp…
## 16 audi         a6 quattro   2.8  1999     6 auto… 4        15    24 p     mids…
## 17 audi         a6 quattro   3.1  2008     6 auto… 4        17    25 p     mids…
## 18 audi         a6 quattro   4.2  2008     8 auto… 4        16    23 p     mids…
  • 想知道 filter() 函数的更多用法,可在 Rstudio 的控制台输入 ?filter 查看帮助文档,其他函数也一样。

select – 选择列

通过基于变量名的操作,select() 函数可以让你快速生成一个有用的变量子集。例如,以下命令选择表中的两列:manufacturer 和 model。

select(mpg, manufacturer, model)
## # A tibble: 234 × 2
##    manufacturer model
##    <chr>        <chr>
##  1 audi         a4
##  2 audi         a4
##  3 audi         a4
##  4 audi         a4
##  5 audi         a4
##  6 audi         a4
##  7 audi         a4
##  8 audi         a4 quattro
##  9 audi         a4 quattro
## 10 audi         a4 quattro
## # … with 224 more rows

mutate – 新增列

除了选择现有的列,我们还经常需要添加新列,新列是现有列的函数。这就是 mutate() 函数的作用。

mutate(mpg, hwy2 = hwy + 1)    # 所有 hwy 的值加 1,然后生成一个新变量 hwy2
## # A tibble: 234 × 12
##    manufacturer model      displ  year   cyl trans drv     cty   hwy fl    class
##    <chr>        <chr>      <dbl> <int> <int> <chr> <chr> <int> <int> <chr> <chr>
##  1 audi         a4           1.8  1999     4 auto… f        18    29 p     comp…
##  2 audi         a4           1.8  1999     4 manu… f        21    29 p     comp…
##  3 audi         a4           2    2008     4 manu… f        20    31 p     comp…
##  4 audi         a4           2    2008     4 auto… f        21    30 p     comp…
##  5 audi         a4           2.8  1999     6 auto… f        16    26 p     comp…
##  6 audi         a4           2.8  1999     6 manu… f        18    26 p     comp…
##  7 audi         a4           3.1  2008     6 auto… f        18    27 p     comp…
##  8 audi         a4 quattro   1.8  1999     4 manu… 4        18    26 p     comp…
##  9 audi         a4 quattro   1.8  1999     4 auto… 4        16    25 p     comp…
## 10 audi         a4 quattro   2    2008     4 manu… 4        20    28 p     comp…
## # … with 224 more rows, and 1 more variable: hwy2 <dbl>

arrange – 排序

arrange()接受一个数据框和一组作为排序依据的列名(或者更复杂的表达式)作为参数。如果列名不只一个,那么就使用后面的列在前面排序的基础上继续排序:

arrange(mpg, model, displ)
## # A tibble: 234 × 11
##    manufacturer model      displ  year   cyl trans drv     cty   hwy fl    class
##    <chr>        <chr>      <dbl> <int> <int> <chr> <chr> <int> <int> <chr> <chr>
##  1 toyota       4runner 4…   2.7  1999     4 manu… 4        15    20 r     suv
##  2 toyota       4runner 4…   2.7  1999     4 auto… 4        16    20 r     suv
##  3 toyota       4runner 4…   3.4  1999     6 auto… 4        15    19 r     suv
##  4 toyota       4runner 4…   3.4  1999     6 manu… 4        15    17 r     suv
##  5 toyota       4runner 4…   4    2008     6 auto… 4        16    20 r     suv
##  6 toyota       4runner 4…   4.7  2008     8 auto… 4        14    17 r     suv
##  7 audi         a4           1.8  1999     4 auto… f        18    29 p     comp…
##  8 audi         a4           1.8  1999     4 manu… f        21    29 p     comp…
##  9 audi         a4           2    2008     4 manu… f        20    31 p     comp…
## 10 audi         a4           2    2008     4 auto… f        21    30 p     comp…
## # … with 224 more rows

summarize – 生成摘要

最后一个核心函数是 summarize(),它可以将数据框折叠成一行:

summarise(mpg, avg_displ = mean(displ))
## # A tibble: 1 × 1
##   avg_displ
##       <dbl>
## 1      3.47

如果不与 group_by() 一起使用,那么 summarize() 也就没什么大用。group_by() 可以将分 析单位从整个数据集更改为单个分组。接下来,在分组后的数据框上使用 dplyr 函数时, 它们会自动地应用到每个分组。例如,我们想知道每个型号汽车的平均排量:

mpg %>% group_by(model) %>% summarize(avg_displ = mean(displ))
## # A tibble: 38 × 2
##    model              avg_displ
##    <chr>                  <dbl>
##  1 4runner 4wd             3.48
##  2 a4                      2.33
##  3 a4 quattro              2.42
##  4 a6 quattro              3.37
##  5 altima                  2.8
##  6 c1500 suburban 2wd      5.52
##  7 camry                   2.67
##  8 camry solara            2.64
##  9 caravan 2wd             3.39
## 10 civic                   1.71
## # … with 28 more rows

group_by() 和 summarize() 的组合构成了使用 dplyr 包时最常用的操作之一:分组摘要。


粉丝福利

经常有粉丝在后台问有没有交流群,想学生信却不知道从哪里开始,之前都是一对一交流,效率太低,现在组建几个交流群,提高沟通效率。

学生信,计算机基础一定要好。毫不夸张地说,计算机基础决定了你能否入门,而生物学修养决定你能走多远。现在组建几个交流群,致力于帮助新手解决入门问题,群内提供:学习资料分享/学习经验交流/答疑解惑等。

  • Linux 学习交流群,99 元 / 年

  • Python 学习交流群,99 元 / 年

  • R 学习交流群,99 元 / 年

面向人群

  • 生信从业人员,基础差,想要提高工作能力(否则有被“毕业”的风险)。

  • 非生信岗同学,零基础,想转生信(不想做实验了/不想写标书 or 论文了)。

  • 非生信岗同学,零基础,想掌握一点数据分析思维,以便更高效地跟生信人员沟通(或者说防止被忽悠)。

  • 在校学生,想报考生信专业,不知道要准备些什么。

联系方式

公众号:简说基因

知乎:简佐义

微信:扫以下二维码

R数据科学整洁之道:使用dplyr操作数据表


原文始发于微信公众号(简说基因):R数据科学整洁之道:使用dplyr操作数据表

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/42814.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!