Подтвердить что ты не робот

Устранение NA из ggplot

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

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

дает мне

"Ошибка: Эстетика должна быть либо одной, либо той же длины, что и данные"

как и привязка na.omit() к переменной_вариабеля, или как к MyData, так и к переменной.

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

4b9b3361

Ответ 1

Вы можете использовать подмножество функций внутри 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")

Ответ 2

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

library(tidyverse) 

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

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

Ответ 3

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

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

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

Ответ 4

С моей точки зрения эта ошибка "Ошибка: эстетика должна быть либо одной, либо той же длины, что и данные" относится к аргументу aes (x, y) Я попробовал na.omit() и отлично работал со мной.