it-swarm.com.de

Entfernen von NAs aus einem ggplot

Dies ist eine sehr grundlegende Frage, da ich gerade erst anfange, R zu verwenden, aber ich versuche, ein Balkendiagramm der Faktorzahlen in ggplot2 zu erstellen. Beim Plotten erhalten Sie 14 kleine, farbige Blips, die meine tatsächlichen Werte darstellen, und dann einen massiven grauen Balken am Ende der 5000-ish NAs in der Stichprobe (die Umfragedaten einer Frage, die nur für etwa 5% der Stichprobe gilt). Ich habe den folgenden Code ohne Erfolg ausprobiert: 

ggplot(data = MyData,aes(x= the_variable, fill=the_variable, na.rm = TRUE)) + 
   geom_bar(stat="bin") 

Die Hinzufügung des na.rm-Arguments hat hier keine offensichtliche Wirkung.

inzwischen 

ggplot(data = na.omit(MyData),aes(x= the_variable, fill=the_variable, na.rm = TRUE)) + 
   geom_bar(stat="bin") 

gibt mir 

"Fehler: Ästhetik muss entweder die Länge eins oder die gleiche Länge wie die Daten haben"

wie das Anbringen der na.omit() an der_Variable oder sowohl an MyData als auch an der_Variable. 

Alles, was ich tun möchte, ist den riesigen NA-Balken aus meiner Grafik zu entfernen. Kann mir jemand bitte dabei helfen?

17
Ben Eichler

Sie können die Funktion subset in ggplot2 verwenden. Versuche dies

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

Nur ein Update auf die Antwort von @ rafa.pereira . Da ggplot2 Teil von tidyverse ist, ist es sinnvoll, die praktischen Tidyverse-Funktionen zu verwenden, um NAs zu entfernen.

library(tidyverse)
airquality %>% 
        drop_na(Ozone) %>%
        ggplot(aes(x = Ozone))+
        geom_bar(stat="bin")

Beachten Sie, dass Sie auch drop_na() ohne Spaltenangabe verwenden können. Dann werden alle Zeilen mit NAs in einer beliebigen Spalte entfernt.

6
ikashnitsky

Nicht sicher, ob Sie das Problem gelöst haben. Für dieses Problem können Sie die Funktion "Filter" im dplyr-Paket verwenden. Die Idee ist, die Beobachtungen/Zeilen zu filtern, deren Werte der Variablen, die Sie interessieren, nicht NA sind. Als Nächstes erstellen Sie das Diagramm mit diesen gefilterten Beobachtungen. Sie finden meine Codes unten und beachten Sie, dass der gesamte Name des Datenrahmens und der Variablen aus der Aufforderung Ihrer Frage kopiert wird. Ich nehme an, Sie kennen die Betreiber der Rohrleitungen.

library(tidyverse) 

MyDate %>%
   filter(!is.na(the_variable)) %>%
     ggplot(aes(x= the_variable, fill=the_variable)) + 
        geom_bar(stat="bin") 

Sie sollten in der Lage sein, die ärgerlichen NAs auf Ihrem Plot zu entfernen. Hoffe das klappt :)

3
Jay Chieh Kao

Das Hinzufügen von na.rm = TRUE zu Ihrem geom_bar () funktioniert außerdem. 

ggplot(data = MyData,aes(x= the_variable, fill=the_variable, na.rm = TRUE)) + 
   geom_bar(stat="bin", na.rm = TRUE)

Ich bin mit einer Schleife in einer Zeitreihe auf dieses Problem gestoßen und dies wurde behoben. Die fehlenden Daten werden entfernt und die Ergebnisse werden sonst nicht beeinflusst. 

3
regents

Versuchen Sie stattdessen remove_missing mit vars = the_variable. Es ist sehr wichtig, dass Sie das Argument vars setzen. Andernfalls entfernt remove_missing alle Zeilen, die eine NA in einer beliebigen Spalte enthalten !! Einstellung na.rm = TRUE unterdrückt die Warnmeldung.

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

Dieser Fehler "Fehler: Ästhetik muss entweder die Länge 1 oder die gleiche Länge wie die Daten haben" Bezieht sich auf das Argument aes (x, y) Ich habe es mit na.omit versucht () und funktionierte gut für mich. 

0
Isis Costa