今天为大家介绍一个 R 语言数据分析必学的包:dplyr。
dplyr
是 tidyverse 包
的一部分,提供了许多操作数据框的工具,常用的有:
-
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 包时最常用的操作之一:分组摘要。
粉丝福利
经常有粉丝在后台问有没有交流群,想学生信却不知道从哪里开始,之前都是一对一交流,效率太低,现在组建几个交流群,提高沟通效率。
学生信,计算机基础一定要好。毫不夸张地说,计算机基础决定了你能否入门,而生物学修养决定你能走多远。现在组建几个交流群,致力于帮助新手解决入门问题,群内提供:学习资料分享/学习经验交流/答疑解惑等。
面向人群
-
生信从业人员,基础差,想要提高工作能力(否则有被“毕业”的风险)。
-
非生信岗同学,零基础,想转生信(不想做实验了/不想写标书 or 论文了)。
-
非生信岗同学,零基础,想掌握一点数据分析思维,以便更高效地跟生信人员沟通(或者说防止被忽悠)。
-
在校学生,想报考生信专业,不知道要准备些什么。
联系方式
公众号:简说基因
知乎:简佐义
微信:扫以下二维码

原文始发于微信公众号(简说基因):R数据科学整洁之道:使用dplyr操作数据表
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/42814.html