Tim*_* S. 70 regex grep r dplyr
我有一个包含大量列的数据框("数据").某些列包含某个字符串("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))])
Run Code Online (Sandbox Code Playgroud)
它们都不起作用.
我知道select()接受数字向量作为列的替代,例如:
select(data,5,7,9:20)
Run Code Online (Sandbox Code Playgroud)
但我不知道如何ID从我的grepl()表达式中获取列的数字向量.
jor*_*ran 92
在dplyr世界中,尝试:
select(iris,contains("Sepal"))
Run Code Online (Sandbox Code Playgroud)
有关?select许多其他帮助者starts_with,请参阅选择部分,如ends_with,等.
Pio*_*dal 48
你可以试试:
select(data, matches("search_string"))
Run Code Online (Sandbox Code Playgroud)
它更通用contains- 你可以使用正则表达式(例如"one_string|or_the_other").
有关更多示例,请参阅:http://rpackages.ianhowson.com/cran/dplyr/man/select.html.
Jil*_*ina 22
不需要select仅使用[而是使用
data[,grepl("search_string", colnames(data))]
Run Code Online (Sandbox Code Playgroud)
让我们试试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
Run Code Online (Sandbox Code Playgroud)
Boe*_*ern 18
基于Piotr Migdals响应,我想提供一个替代解决方案,支持字符串向量的可能性:
myVectorOfStrings <- c("foo", "bar")
matchExpression <- paste(myVectorOfStrings, collapse = "|")
# [1] "foo|bar"
df %>% select(matches(matchExpression))
Run Code Online (Sandbox Code Playgroud)
利用正则表达式OR运算符(|)