2013-06-20 14 views
13

Sehr grundlegende Frage hier, wie ich gerade anfange, R zu verwenden, aber ich versuche, ein Balkendiagramm der Faktorzählungen in ggplot2 zu erstellen und 14 kleine farbige Blips, die meine tatsächlichen Ebenen darstellen und dann ein massiver grauer Balken am Ende, der die 5000-isen NAs in der Stichprobe darstellt (es sind Umfragedaten von einer Frage, die nur für ungefähr 5% der Stichprobe gilt). Ich habe den folgenden Code vergeblich versucht:Eliminieren von NAs aus einem ggplot

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

Der Zusatz der na.rm Argument hier hat keine offensichtliche Wirkung. mittlerweile

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

gibt mir

"Error: Aesthetics must either be length one, or the same length as the data"

wie sich die Anbringung der na.omit() the_variable oder beide MyData und the_variable.

Alles, was ich tun möchte, ist die Eliminierung der riesigen NA-Bar aus meinem Diagramm, kann mir bitte jemand helfen, dies zu tun?

+2

Es ist wirklich unmöglich, ohne Ihre Daten zu helfen. Sie müssen ein [kleines Beispiel] (http://stackoverflow.com/q/5963269/324364) angeben, das wir tatsächlich ausführen können, damit wir Ihre tatsächliche Datenstruktur betrachten können. – joran

+2

Ohne Ihre Daten zu sehen, können Sie möglicherweise nur die Nicht-NA-Werte für Plotting-Zwecke unterteilen. Dh 'MyData <- MyData [! Is.na (MyData)]', dann zeichne einfach die Teilmenge. Ich mache oft etwas Ähnliches, um Nullen zu entfernen. – dayne

+0

Würde es funktionieren, Ihre Füllvariable einfach neu zu gestalten? 'fill = faktor (die_variable)' –

Antwort

16

Sie können die Funktionsteilmenge innerhalb von ggplot2 verwenden. Versuchen Sie, diese

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") 
+0

Leider hat 'iris' keine NAs.) – ikashnitsky

+0

jetzt tut es. Danke für die Köpfe :) –

+0

Ha! Das ist eine nette Art, den Kommentar zu behandeln.) Ich denke, für fast jeden Fall gibt es einen passenden Datensatz [von den R-eingebauten] (https://vincentarelbundock.github.io/Rdatasets/datasets).html) – ikashnitsky

0

Aus meiner Sicht dieser Fehler „Fehler: Ästhetik entweder Länge eins sein muss, oder die gleiche Länge wie die Daten“ bezieht sich auf die Argumentation aes (x, y) Ich habe versucht, die na.omit() und funktionierte gut zu mir.

1

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 loszuwerden.

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

Beachten Sie, dass Sie auch drop_na() ohne Spalten Spezifikation verwenden können; dann werden alle Zeilen mit NAs in jeder Spalte entfernt.

2

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 besteht darin, die Beobachtungen/Zeilen zu filtern, deren Werte der Variablen Ihres Interesses nicht NA sind. Als Nächstes erstellen Sie den Graphen mit diesen gefilterten Beobachtungen. Sie können meine Codes unten finden und beachten, dass der gesamte Name des Datenrahmens und der Variablen von der Eingabeaufforderung Ihrer Frage kopiert wird. Außerdem nehme ich an, Sie kennen die Rohrbetreiber.

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 lästigen NAs auf Ihrem Grundstück zu entfernen. Hoffe, das funktioniert :)

+0

Danke, Gregor. Ich habe die Codes korrigiert. –

Verwandte Themen