Question très élémentaire, car je commence tout juste à utiliser R, mais j'essaie de créer un diagramme à barres des nombres de facteurs dans ggplot2 et lors du traçage, obtenez 14 petits bips colorés représentant mes niveaux réels, puis une barre grise massive fin représentant les 5 000 NA de l’échantillon (il s’agit des données d’enquête d’une question qui ne s’applique qu’à 5% environ de l’échantillon). J'ai essayé le code suivant en vain:
ggplot(data = MyData,aes(x= the_variable, fill=the_variable, na.rm = TRUE)) +
geom_bar(stat="bin")
L'ajout de l'argument na.rm ici n'a aucun effet apparent.
pendant ce temps
ggplot(data = na.omit(MyData),aes(x= the_variable, fill=the_variable, na.rm = TRUE)) +
geom_bar(stat="bin")
donne moi
"Erreur: l'esthétique doit être soit de longueur un, soit de la même longueur que les données"
comme l'apposition de la na.omit()
à la variable, ou à la fois de MyData et de la variable.
Tout ce que je veux faire, c'est éliminer la barre NA géante de mon graphique. Quelqu'un peut-il m'aider s'il vous plaît à le faire?
Vous pouvez utiliser la fonction subset
dans ggplot2
. Essaye ça
library(ggplot2)
data("iris")
iris$Sepal.Length[5:10] <- NA # create some NAs for this example
ggplot(data=subset(iris, !is.na(Sepal.Length)), aes(x=Sepal.Length)) +
geom_bar(stat="bin")
Juste une mise à jour de la réponse de @ rafa.pereira . Puisque ggplot2
fait partie de tidyverse
, il est logique d’utiliser les fonctions pratiques de netteté pour supprimer les NA.
library(tidyverse)
airquality %>%
drop_na(Ozone) %>%
ggplot(aes(x = Ozone))+
geom_bar(stat="bin")
Notez que vous pouvez également utiliser drop_na()
sans spécification de colonne; alors toutes les lignes avec des NA dans n'importe quelle colonne seront supprimées.
Je ne sais pas si vous avez résolu le problème. Pour ce problème, vous pouvez utiliser la fonction "Filtre" dans le package dplyr. L'idée est de filtrer les observations/lignes dont les valeurs de la variable qui vous intéresse ne sont pas NA. Ensuite, vous créez le graphique avec ces observations filtrées. Vous pouvez trouver mes codes ci-dessous et noter que tout le nom du bloc de données et de la variable est copié à partir de l'invite de votre question. De plus, je suppose que vous connaissez les opérateurs de pipe.
library(tidyverse)
MyDate %>%
filter(!is.na(the_variable)) %>%
ggplot(aes(x= the_variable, fill=the_variable)) +
geom_bar(stat="bin")
Vous devriez pouvoir supprimer les NA agaçants de votre parcelle. J'espère que ça marche :)
De plus, l'ajout de na.rm = TRUE à votre geom_bar () fonctionnera.
ggplot(data = MyData,aes(x= the_variable, fill=the_variable, na.rm = TRUE)) +
geom_bar(stat="bin", na.rm = TRUE)
J'ai rencontré ce problème avec une boucle dans une série chronologique et cela a résolu le problème. Les données manquantes sont supprimées et les résultats ne sont autrement pas affectés.
Essayez plutôt remove_missing
avec vars = the_variable
. Il est très important de définir l'argument vars
, sinon remove_missing
supprimera toutes les lignes contenant une NA
dans n'importe quelle colonne !! Setting na.rm = TRUE
supprime le message d’avertissement.
ggplot(data = remove_missing(MyData, na.rm = TRUE, vars = the_variable),aes(x= the_variable, fill=the_variable, na.rm = TRUE)) +
geom_bar(stat="bin")
De mon point de vue, cette erreur "Erreur: l’esthétique doit avoir la longueur un ou la même longueur que les données" Fait référence à l’argument aes (x, y) J’ai essayé le na.omit () et a bien fonctionné pour moi.