我想根据名称使用 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
怎么了?
答案 0 :(得分:67)
您可以使用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)':选择其所有变量 name匹配正则表达式'x'
虽然contains
使用单个字符串
mtcars %>%
select(contains('m'))
答案 1 :(得分:1)
您仍然可以使用基础 R 中的 grepl()。
df <- mtcars[ , grepl('m|ar', names(mtcars))]
...返回一个子集数据框 df
,其中包含列名称中带有 m
或 ar
的列