select 列基于带有 dplyr contains() 的多个字符串
select columns based on multiple strings with dplyr contains()
我想 select 基于名称的多个列和 regex 表达式。我正在尝试使用 dplyr
包的管道语法来完成它。我检查了其他主题,但只找到了关于单个字符串的答案。
基数 R:
library(dplyr)
mtcars[grepl('m|ar', names(mtcars))]
### mpg am gear carb
### Mazda RX4 21.0 1 4 4
### Mazda RX4 Wag 21.0 1 4 4
但是它不适用于 select/contains 方式:
mtcars %>% select(contains('m|ar'))
### data frame with 0 columns and 32 rows
怎么了?
您可以使用matches
mtcars %>%
select(matches('m|ar')) %>%
head(2)
# mpg am gear carb
#Mazda RX4 21 1 4 4
#Mazda RX4 Wag 21 1 4 4
根据 ?select
文档
‘matches(x, ignore.case = TRUE)’: selects all variables whose
name matches the regular expression ‘x’
尽管 contains
使用单个字符串
mtcars %>%
select(contains('m'))
您仍然可以使用基础 R 中的 grepl()。
df <- mtcars[ , grepl('m|ar', names(mtcars))]
...其中 returns 一个子集数据框,df
,包含列名 m
或 ar
的列
您可以使用包 dplyr
中的 contains
,如果您提供文本选项向量,如下所示:
mtcars %>%
select(contains(c("m", "ar"))
我想 select 基于名称的多个列和 regex 表达式。我正在尝试使用 dplyr
包的管道语法来完成它。我检查了其他主题,但只找到了关于单个字符串的答案。
基数 R:
library(dplyr)
mtcars[grepl('m|ar', names(mtcars))]
### mpg am gear carb
### Mazda RX4 21.0 1 4 4
### Mazda RX4 Wag 21.0 1 4 4
但是它不适用于 select/contains 方式:
mtcars %>% select(contains('m|ar'))
### data frame with 0 columns and 32 rows
怎么了?
您可以使用matches
mtcars %>%
select(matches('m|ar')) %>%
head(2)
# mpg am gear carb
#Mazda RX4 21 1 4 4
#Mazda RX4 Wag 21 1 4 4
根据 ?select
文档
‘matches(x, ignore.case = TRUE)’: selects all variables whose name matches the regular expression ‘x’
尽管 contains
使用单个字符串
mtcars %>%
select(contains('m'))
您仍然可以使用基础 R 中的 grepl()。
df <- mtcars[ , grepl('m|ar', names(mtcars))]
...其中 returns 一个子集数据框,df
,包含列名 m
或 ar
的列
您可以使用包 dplyr
中的 contains
,如果您提供文本选项向量,如下所示:
mtcars %>%
select(contains(c("m", "ar"))