dplyr的select与rename系列函数用法
2019-10-26 本文已影响0人
BeeBee生信
dplyr属于tidyverse,安装方法
install.packages("dplyr")
# 或者
install.packages("tidyverse")
select
用于选择数据框(tibble, dataframe)部分列, rename
用于重命名部分列。这2个函数最基础和常用,我这个教程就以 select(rename)_at, select(rename)_all, select(rename)_if
函数为重点。很多时候 rename
和 select
相关函数区别是 rename
会选择 所有列 ,而 select
系列只选择 目标列 。
本文主要以数据集 mtcars
作为示例对象。
> head(mtcars)
mpg cyl disp hp drat wt qsec vs am gear carb
Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
select/rename
- select(.data, ...)
- rename(.data, ...)
直接对目标列进行操作。操作符 %>%
是tidyverse定义的,类似于Linux的管道符 |
在R用这个经常让代码更简洁易读。这2函数都支持按列名和位置进行操作,个人建议还是按列名好。如果你的列名有空格等特殊字符,需要用 "`" 符号括起来,比如 "`my col`" 这样。
# 选择部分列
> select(mtcars, mpg, cyl) %>% head()
mpg cyl
Mazda RX4 21.0 6
Mazda RX4 Wag 21.0 6
Datsun 710 22.8 4
Hornet 4 Drive 21.4 6
Hornet Sportabout 18.7 8
Valiant 18.1 6
> select(mtcars, 1, 2) %>% head()
mpg cyl
Mazda RX4 21.0 6
Mazda RX4 Wag 21.0 6
Datsun 710 22.8 4
Hornet 4 Drive 21.4 6
Hornet Sportabout 18.7 8
Valiant 18.1 6
# 按条件选择列
> select(mtcars, contains("m")) %>% head()
mpg am
Mazda RX4 21.0 1
Mazda RX4 Wag 21.0 1
Datsun 710 22.8 1
Hornet 4 Drive 21.4 0
Hornet Sportabout 18.7 0
Valiant 18.1 0
# 列重命名
> rename(mtcars, CYL=cyl) %>% head()
mpg CYL disp hp drat wt qsec vs am gear carb
Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
select_all/rename_all
- select_all(.tbl, .funs = list(), ...)
- rename_all(.tbl, .funs = list(), ...)
对所有列名按照所给函数进行操作,两函数有什么区别么?我还真没看出来。
# 转换为大写
> select_all(mtcars, toupper) %>% head()
MPG CYL DISP HP DRAT WT QSEC VS AM GEAR CARB
Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
# 给列名后面加上 -ss 结尾
> select_all(mtcars, list(~ str_glue("{.}-ss"))) %>% head()
mpg-ss cyl-ss disp-ss hp-ss drat-ss wt-ss qsec-ss
Mazda RX4 21.0 6 160 110 3.90 2.620 16.46
Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02
Datsun 710 22.8 4 108 93 3.85 2.320 18.61
Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44
Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02
Valiant 18.1 6 225 105 2.76 3.460 20.22
vs-ss am-ss gear-ss carb-ss
Mazda RX4 0 1 4 4
Mazda RX4 Wag 0 1 4 4
Datsun 710 1 1 4 1
Hornet 4 Drive 1 0 3 1
Hornet Sportabout 0 0 3 2
Valiant 1 0 3 1
select_if/rename_if
- select_if(.tbl, .predicate, .funs = list(), ...)
- rename_if(.tbl, .predicate, .funs = list(), ...)
根据 .predicate
参数筛选列然后操作(注意 .predicate
作用对象是 列包含元素 ,而不是列名本身)。
# 选择和大于200的列
> select_if(mtcars, ~ sum(.) > 200, toupper) %>% head()
MPG DISP HP QSEC
Mazda RX4 21.0 160 110 16.46
Mazda RX4 Wag 21.0 160 110 17.02
Datsun 710 22.8 108 93 18.61
Hornet 4 Drive 21.4 258 110 19.44
Hornet Sportabout 18.7 360 175 17.02
Valiant 18.1 225 105 20.22
> rename_if(mtcars, ~ sum(.) > 200, toupper) %>% head()
MPG cyl DISP HP drat wt QSEC vs am gear carb
Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
select_at/rename_at
- select_at(.tbl, .vars, .funs = list(), ...)
- rename_at(.tbl, .vars, .funs = list(), ...)
根据 vars()
函数取列操作,也可以直接提供位置或者列名。
> rename_at(mtcars, vars(starts_with("m")), toupper) %>% head()
MPG cyl disp hp drat wt qsec vs am gear carb
Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1