Выбор столбцов на основе строки match - dplyr:: select


у меня есть фрейм данных ("данные") с большим количеством столбцов. Некоторые столбцы содержат определенную строку ("search_string").

как я могу использовать dplyr::select() чтобы дать мне подмножество, включающее только столбцы, содержащие строку?

пробовал:

# columns as boolean vector
select(data, grepl("search_string",colnames(data)))

# columns as vector of column names names 
select(data, colnames(data)[grepl("search_string",colnames(data))]) 

ни один из них не работает.

Я знаю, что select() принимает числовые векторы в качестве замены столбцов, например:

select(data,5,7,9:20)

но я не знаю как получить числовой вектор колонки IDмой grepl() выражение.

4 51

4 ответа:

внутри dplyr мир, попробовать:

select(iris,contains("Sepal"))

см. раздел выбора в ?select для многих других помощников, как starts_with,ends_with и т. д.

можно попробовать:

select(data, matches("search_string"))

это более общее, чем contains - вы можете использовать регулярное выражение (например,"one_string|or_the_other").

дополнительные примеры см.:http://rpackages.ianhowson.com/cran/dplyr/man/select.html.

нет необходимости использовать select просто использовать [ вместо

data[,grepl("search_string", colnames(data))]

давайте попробуем с iris dataset

>iris[,grepl("Sepal", colnames(iris))]
  Sepal.Length Sepal.Width
1          5.1         3.5
2          4.9         3.0
3          4.7         3.2
4          4.6         3.1
5          5.0         3.6
6          5.4         3.9

на основе ответа Петра Мигдалса я хочу дать альтернативное решение, позволяющее использовать вектор строк:

myVectorOfStrings <- c("foo", "bar")
matchExpression <- paste(myVectorOfStrings, collapse = "|")
# [1] "foo|bar"
df %>% select(matches(matchExpression))

использование регулярного выражения OR оператор (|)