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 函数为重点。很多时候 renameselect 相关函数区别是 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

直接对目标列进行操作。操作符 %>% 是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(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

根据 .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

根据 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

参考&推荐资料

推荐阅读

上一篇 下一篇

猜你喜欢

热点阅读