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