J'essaie de désélectionner les colonnes de mon jeu de données à l'aide de dplyr, mais je ne suis pas en mesure d'y parvenir depuis hier soir.
Je connais bien le travail, mais j'essaie strictement de trouver une réponse uniquement via dplyr.
library(dplyr)
df <- tibble(x = c(1,2,3,4), y = c('a','b','c','d'))
df %>% select(-c('x'))
Me donne une erreur: Erreur dans -c ("x"): argument invalide à l'opérateur unaire
Maintenant, je sais que select prend des valeurs non cotées mais je ne suis pas en mesure de sous-sélectionner de cette façon.
Veuillez noter que l'ensemble de données ci-dessus n'est qu'un exemple, nous pouvons avoir plusieurs colonnes.
Merci,
Prerit
Edit: la question réelle d'OP était de savoir comment utiliser un vecteur de caractères pour sélectionner ou désélectionner des colonnes d'une trame de données. Utilisez la fonction d'assistance one_of()
pour cela:
colnames(iris)
# [1] "Sepal.Length" "Sepal.Width" "Petal.Length" "Petal.Width" "Species"
cols <- c("Petal.Length", "Sepal.Length")
select(iris, one_of(cols)) %>% colnames
# [1] "Petal.Length" "Sepal.Length"
select(iris, -one_of(cols)) %>% colnames
# [1] "Sepal.Width" "Petal.Width" "Species"
Vous devriez jeter un œil aux assistants sélectionnés (tapez ?select_helpers
) Car ils sont incroyablement utiles. De la documentation:
starts_with()
: commence par un préfixe
ends_with()
: se termine par un préfixe
contains()
: contient une chaîne littérale
matches()
: correspond à une expression régulière
num_range()
: une plage numérique comme x01, x02, x03.
one_of()
: variables dans le vecteur de caractères.
everything()
: toutes les variables.
Étant donné une trame de données avec des noms de colonnes a: z, utilisez select
comme ceci:
select(-a, -b, -c, -d, -e)
# OR
select(-c(a, b, c, d, e))
# OR
select(-(a:e))
# OR if you want to keep b
select(-a, -(c:e))
# OR a different way to keep b, by just putting it back in
select(-(a:e), b)
Donc, si je voulais omettre deux des colonnes de l'ensemble de données iris
, je pourrais dire:
colnames(iris)
# [1] "Sepal.Length" "Sepal.Width" "Petal.Length" "Petal.Width" "Species"
select(iris, -c(Sepal.Length, Petal.Length)) %>% colnames()
# [1] "Sepal.Width" "Petal.Width" "Species"
Mais bien sûr, le meilleur moyen et le plus concis pour y parvenir est d'utiliser l'une des fonctions d'assistance de select
:
select(iris, -ends_with(".Length")) %>% colnames()
# [1] "Sepal.Width" "Petal.Width" "Species"
P.S. C'est bizarre que vous passiez des valeurs entre guillemets à dplyr
, une de ses grandes subtilités est que vous pas devez continuer à taper des guillemets tout le temps. Comme vous pouvez le voir, les valeurs nues fonctionnent correctement avec dplyr
et ggplot2
.