web-dev-qa-db-fra.com

Éliminer les AN d'un ggplot

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?

17
Ben Eichler

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")
25
rafa.pereira

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.

6
ikashnitsky

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 :)

3
Jay Chieh Kao

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. 

3
regents

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") 
2
Bryan F

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. 

0
Isis Costa