web-dev-qa-db-ja.com

dplyr contains()で複数の文字列に基づいて列を選択します

regex式を使用して、名前に基づいて複数の列を選択したい。私はdplyrパッケージのパイピング構文でそれをやろうとしています。他のトピックを確認しましたが、1つの文字列についての回答しか見つかりませんでした。

ベース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

どうしましたか?

35
agenis

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)」:名前が正規表現「x」に一致するすべての変数を選択します

containsは単一の文字列で動作しますが

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