Выбрать столбцы на основе нескольких строк с помощью dplyr contains()
Я хочу выбрать несколько столбцов на основе их имен с помощью выражения регулярного выражения. Я пытаюсь сделать это с помощью синтаксиса трубопровода 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
Однако это не работает с выбором / содержит способ:
mtcars %>% select(contains('m|ar'))
### data frame with 0 columns and 32 rows
В чем дело?
4 ответа
Ты можешь использовать 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
документация
'match (x, ignore.case = TRUE)': выбирает все переменные, имена которых совпадают с регулярным выражением "x"
Хоть contains
работать с одной строкой
mtcars %>%
select(contains('m'))
Вы можете использовать
contains
из пакета
dplyr
, если вы зададите вектор вариантов текста, например:
mtcars %>%
select(contains(c("m", "ar"))
Вы все еще можете использовать grepl() из базы R.
df <- mtcars[ , grepl('m|ar', names(mtcars))]
... который возвращает фрейм данных подмножества,
df
, содержащий столбцы с
m
или
ar
в названиях столбцов
вот альтернатива
mtcars %>%
select(contains('m') | contains('ar')) %>%
head(2)
# mpg am gear carb
# Mazda RX4 21 1 4 4
# Mazda RX4 Wag 21 1 4 4