J'ai un cadre de données ("données") avec beaucoup, beaucoup de colonnes. Certaines colonnes contiennent une certaine chaîne ("chaîne_recherche").
Comment puis-je utiliser dplyr::select()
pour me donner un sous-ensemble comprenant uniquement les colonnes contenant la chaîne?
J'ai essayé:
# 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))])
Ni l'un ni l'autre ne travaille.
Je sais que select()
accepte les vecteurs numériques en remplacement des colonnes, par exemple:
select(data,5,7,9:20)
Mais je ne sais pas comment obtenir un vecteur numérique de colonnes ID
s à partir de mon expression grepl()
.
Dans le monde dplyr, essayez:
select(iris,contains("Sepal"))
Voir la section Sélection dans ?select
pour de nombreux autres aides comme starts_with
, ends_with
, etc.
Tu peux essayer:
select(data, matches("search_string"))
C’est plus général que contains
- vous pouvez utiliser regex (par exemple, "one_string|or_the_other"
).
Pour plus d'exemples, voir: http://rpackages.ianhowson.com/cran/dplyr/man/select.html .
Pas besoin d'utiliser select
utilisez simplement [
au lieu
data[,grepl("search_string", colnames(data))]
Essayons avec iris
ensemble de données
>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
Sur la base de la réponse de Piotr Migdals, je souhaite proposer une solution alternative permettant la création d’un vecteur de chaînes:
myVectorOfStrings <- c("foo", "bar")
matchExpression <- paste(myVectorOfStrings, collapse = "|")
# [1] "foo|bar"
df %>% select(matches(matchExpression))
Utilisation de l'opérateur regex OR
(|
)