2013-06-20 19 views
13

Domanda di base qui mentre sto appena iniziando a utilizzare R, ma sto cercando di creare un grafico a barre di conteggi dei fattori in ggplot2 e quando si esegue il plottaggio, ottieni 14 piccoli blip colorati che rappresentano i miei livelli effettivi e poi un'enorme barra grigia all'estremità che rappresenta le NA di 5000 ish nel campione (sono i dati di un sondaggio da una domanda che si applica solo a circa il 5% del campione). Ho provato il seguente codice senza alcun risultato:Eliminazione di NAs da un ggplot

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

L'aggiunta dell'argomento na.rm qui non ha alcun effetto apparente.

frattempo

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

mi dà

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

come fa apporre il na.omit() a the_variable, o entrambi MyData e the_variable.

Tutto ciò che voglio fare è eliminare la barra NA gigante dal mio grafico, qualcuno può aiutarmi a farlo?

+2

È davvero impossibile aiutare senza avere i tuoi dati. Devi fornire un [piccolo esempio] (http://stackoverflow.com/q/5963269/324364) che possiamo effettivamente eseguire, quindi siamo in grado di esaminare la struttura dei dati effettiva. – joran

+2

Senza visualizzare i tuoi dati, potresti essere in grado di impostare solo i valori non NA per scopi di stampa. Vale a dire "MyData.sub <- MyData [! Is.na (MyData)]", quindi traccia il sottoinsieme. Faccio spesso qualcosa di simile per rimuovere gli zeri. – dayne

+0

Funzionerebbe solo per il refactor della variabile di riempimento? 'fill = factor (the_variable)' –

risposta

16

È possibile utilizzare la serie di funzioni all'interno di ggplot2. Prova questo

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

Sfortunatamente, 'iris' non ha NA.) – ikashnitsky

+0

ora lo fa. Grazie per l'avviso :) –

+0

Ha! Questo è un bel modo di trattare il commento)) Immagino che, per quasi tutti i casi, ci sia un insieme di dati adatto [dai R built-in] (https://vincentarelbundock.github.io/Rdatasets/datasets.html) – ikashnitsky

0

Dal mio punto di vista questo errore "Errore: estetica devono essere o lunghezza, o la stessa lunghezza dei dati" riferisce ai aes argomento (x, y) ho provato la na.omit() e ha funzionato bene per me.

1

Solo un aggiornamento della risposta di @ rafa.pereira. Dato che fa parte di tidyverse, è logico utilizzare le comode funzioni di tidyverse per eliminare le NA.

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

Nota che è anche possibile utilizzare drop_na() senza specifica colonne; quindi tutte le righe con NA in qualsiasi colonna verranno rimosse.

2

Non sono sicuro di aver risolto il problema. Per questo problema, è possibile utilizzare la funzione "filtro" nel pacchetto dplyr. L'idea è di filtrare le osservazioni/righe i cui valori della variabile di tuo interesse non sono NA. Quindi, si crea il grafico con queste osservazioni filtrate. Puoi trovare i miei codici qui sotto e tieni presente che tutto il nome del frame dati e della variabile viene copiato dal prompt della tua domanda. Suppongo anche che tu conosca gli operatori di pipe.

library(tidyverse) 

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

Dovresti essere in grado di rimuovere le NA fastidiose sulla trama. Spero che funzioni :)

+0

Grazie, Gregor. Ho risolto i codici. –

Problemi correlati