たくさんの列を持つデータフレーム(「データ」)があります。一部の列には、特定の文字列( "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)
しかし、grepl()
式から列ID
sの数値ベクトルを取得する方法がわかりません。
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
データセットで試してみましょう
>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))
正規表現OR
演算子(|
)を使用する