Устранение 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 из моего графика, может кто-то, пожалуйста, помогите мне сделать это?
Ответы
Ответ 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() и отлично работал со мной.