Выбрать столбцы на основе нескольких строк с помощью 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
Другие вопросы по тегам