Подтвердить что ты не робот

Выберите столбцы на основе соответствия строк - 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().

4b9b3361

Ответ 1

В мире dplyr попробуйте:

select(iris,contains("Sepal"))

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

Ответ 2

Вы можете попробовать:

select(data, matches("search_string"))

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

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

Ответ 3

Не нужно использовать 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

Ответ 4

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

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

Использование оператора regex OR (|)