web-dev-qa-db-fra.com

sélectionner des colonnes basées sur plusieurs chaînes avec dplyr contains ()

Je veux sélectionner plusieurs colonnes en fonction de leurs noms avec une expression regex. J'essaie de le faire avec la syntaxe de tuyauterie du package dplyr. J'ai vérifié les autres sujets, mais je n'ai trouvé de réponses que sur une seule chaîne.

Avec base 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

Cependant, cela ne fonctionne pas avec la méthode select/contains:

mtcars %>% select(contains('m|ar'))
### data frame with 0 columns and 32 rows

Qu'est-ce qui ne va pas?

35
agenis

Vous pouvez utiliser 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

Selon le ?select Documentation

‘Matches (x, ignore.case = TRUE)’: sélectionne toutes les variables dont le nom correspond à l’expression régulière ‘x’

Bien que contains fonctionne avec une seule chaîne

mtcars %>% 
       select(contains('m'))
73
akrun