前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >R数据科学整洁之道:使用dplyr操作数据表

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

作者头像
简说基因
发布2022-11-11 16:11:14
8800
发布2022-11-11 16:11:14
举报
文章被收录于专栏:简说基因简说基因

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

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

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

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

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

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

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

安装

代码语言:javascript
复制
# 最简单的方法,安装整个 tidyverse 包
install.packages("tidyverse")

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

数据准备

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

代码语言:javascript
复制
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品牌的车:

代码语言:javascript
复制
filter(mpg, manufacturer == 'audi')
代码语言:javascript
复制
## # 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。

代码语言:javascript
复制
select(mpg, manufacturer, model)
代码语言:javascript
复制
## # 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() 函数的作用。

代码语言:javascript
复制
mutate(mpg, hwy2 = hwy + 1)    # 所有 hwy 的值加 1,然后生成一个新变量 hwy2
代码语言:javascript
复制
## # 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()接受一个数据框和一组作为排序依据的列名(或者更复杂的表达式)作为参数。如果列名不只一个,那么就使用后面的列在前面排序的基础上继续排序:

代码语言:javascript
复制
arrange(mpg, model, displ)
代码语言:javascript
复制
## # 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(),它可以将数据框折叠成一行:

代码语言:javascript
复制
summarise(mpg, avg_displ = mean(displ))
代码语言:javascript
复制
## # A tibble: 1 × 1
##   avg_displ
##       <dbl>
## 1      3.47

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

代码语言:javascript
复制
mpg %>% group_by(model) %>% summarize(avg_displ = mean(displ))
代码语言:javascript
复制
## # 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 包时最常用的操作之一:分组摘要。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-07-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 简说基因 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 安装
  • 数据准备
  • filter - 选择行
  • select - 选择列
  • mutate - 新增列
  • arrange - 排序
  • summarize - 生成摘要
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档