У меня есть фрейм данных («данные») с множеством столбцов. Некоторые столбцы содержат определенную строку ("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
s из моего grepl()
выражения.
Ответы:
В мире dplyr попробуйте:
select(iris,contains("Sepal"))
См. Раздел «Выбор»
?select
для получения информации о многих других помощниках, напримерstarts_with
,ends_with
и т. Д.источник
select(iris, contains(".") )
Не уверен, как вы должны перейтиfixed=TRUE
к принудительному поиску фактического"."
fixed = TRUE
или эквивалент). dplyr еще довольно молод.Ты можешь попробовать:
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
набором данных>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
источник
dplyr
- это panceum - даже если вы можете это сделатьbase
, стандартный синтаксис не такой приятный / читаемый / составной - см. мой ответ .Основываясь на ответе Петра Мигдальса, я хочу дать альтернативное решение, позволяющее использовать вектор строк:
myVectorOfStrings <- c("foo", "bar") matchExpression <- paste(myVectorOfStrings, collapse = "|") # [1] "foo|bar" df %>% select(matches(matchExpression))
Использование
OR
оператора регулярного выражения (|
)ВНИМАНИЕ : Если у вас действительно есть простой вектор имен столбцов (и вам не нужна мощность RegExpression), см. Комментарий под этим ответом (так как это более чистое решение).
источник
select(df, one_of(array_of_colnames))