我有一个包含大量列的数据框(“数据”)。有些列包含某个字符串(“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()
的数字向量。
答案 0 :(得分:85)
在 dplyr 世界中,请尝试:
select(iris,contains("Sepal"))
请参阅?select
中的选择部分,了解许多其他帮助,例如starts_with
,ends_with
等。
答案 1 :(得分:42)
您可以尝试:
select(data, matches("search_string"))
它比contains
更通用 - 您可以使用正则表达式(例如"one_string|or_the_other"
)。
有关更多示例,请参阅:http://rpackages.ianhowson.com/cran/dplyr/man/select.html。
答案 2 :(得分:22)
无需使用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
答案 3 :(得分:17)
根据Piotr Migdals的回复,我想提供一个替代解决方案,以便能够提供字符串向量:
myVectorOfStrings <- c("foo", "bar")
matchExpression <- paste(myVectorOfStrings, collapse = "|")
# [1] "foo|bar"
df %>% select(matches(matchExpression))
使用正则表达式OR
运算符(|
)