Ответ 1
В мире dplyr попробуйте:
select(iris,contains("Sepal"))
Смотрите раздел выбора в ?select
для многих других помощников, таких как starts_with
, ends_with
и т.д.
У меня есть кадр данных ( "данные" ) с большим количеством столбцов. Некоторые столбцы содержат определенную строку ( "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()
.
В мире 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
На основании ответа Piotr Migdals я хочу дать альтернативное решение, позволяющее использовать вектор строк:
myVectorOfStrings <- c("foo", "bar")
matchExpression <- paste(myVectorOfStrings, collapse = "|")
# [1] "foo|bar"
df %>% select(matches(matchExpression))
Использование оператора regex OR
(|
)