2013-06-20 3 views
13

Очень простой вопрос здесь, поскольку я только начинаю использовать R, но я пытаюсь создать штрих-график количества факторов в ggplot2 и при построении графика получить 14 маленьких цветных бликов, представляющих мои фактические уровни а затем массивная серая полоса в конце, представляющая 5000-иш NA в образце (это данные опроса из вопроса, который относится только к примерно 5% образца). Я пробовал следующий код безрезультатно:Устранение НС из ggplot

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

Добавление аргумента na.rm здесь не имеет видимого эффекта.

тем временем

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

дает мне

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

, как это прикрепление na.omit() к the_variable, или оба MyData и the_variable.

Все, что я хочу сделать, это устранить гигантскую панель NA с моего графика, может кто-то, пожалуйста, помогите мне сделать это?

+2

Это действительно невозможно помочь без ваших данных. Вам нужно предоставить [маленький пример] (http://stackoverflow.com/q/5963269/324364), который мы можем запустить, поэтому мы можем посмотреть вашу фактическую структуру данных. – joran

+2

Не видя своих данных, вы можете подмножить только значения не-NA для целей построения графика. Т.е. 'MyData.sub <- MyData [! Is.na (MyData)]', тогда просто зарисуйте подмножество. Я часто делаю что-то подобное, чтобы удалить нули. – dayne

+0

Будет ли это работать только для рефакторинга вашей переменной заполнения? 'fill = factor (the_variable)' –

ответ

16

Вы можете использовать подмножество функций внутри ggplot2. Попробуйте

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

К сожалению, у 'iris' нет NA.) – ikashnitsky

+0

теперь он делает. Спасибо за головы :) –

+0

Ha! Это хороший способ обработать комментарий)) Я думаю, для почти любого случая есть хорошо подходящий набор данных [из встроенных R-файлов] (https://vincentarelbundock.github.io/Rdatasets/datasets.html) – ikashnitsky

0

С моей точки зрения эта ошибка «Ошибка: Эстетика должна быть либо длина один, или такой же длины, как данные» относится к аргументу AES (х, у) я попробовал na.omit() и отлично справился со мной.

1

Просто обновите ответ @ rafa.pereira. Поскольку ggplot2 является частью tidyverse, имеет смысл использовать удобные функции tidyverse, чтобы избавиться от NA.

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

Обратите внимание, что вы также можете использовать drop_na() без спецификации столбцов; то все строки с NA в любом столбце будут удалены.

2

Не уверен, что вы решили проблему. Для этой проблемы вы можете использовать функцию «фильтр» в пакете dplyr. Идея состоит в том, чтобы отфильтровать наблюдения/строки, значения переменных которых не являются NA. Затем вы создадите график с этими отфильтрованными наблюдениями. Вы можете найти мои коды ниже, и обратите внимание, что все имя фрейма данных и переменной копируется из подсказки вашего вопроса. Кроме того, я предполагаю, что вы знаете операторов труб.

library(tidyverse) 

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

Вы должны уметь удалять раздражающие НС на вашем участке. Надеюсь, это сработает :)

+0

Спасибо, Грегор. Я исправил коды. –