消除ggplot中的NA

时间:2013-06-20 14:29:45

标签: r ggplot2

这里非常基本的问题因为我刚刚开始使用R,但是我试图在ggplot2中创建因子计数的条形图,并且在绘图时,得到14个小的彩色代表我的实际水平和然后是一个巨大的灰色条,代表样本中的5000个NAs(它的问卷调查数据仅适用于约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()附加到the_variable,或同时附加MyData和the_variable。

我想要做的就是从我的图表中删除巨型NA栏,有人可以帮我这样做吗?

6 个答案:

答案 0 :(得分:27)

您可以使用subset内的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")

答案 1 :(得分:6)

只是对@ rafa.pereira答案的更新。 由于ggplot2tidyverse的一部分,因此使用方便的tidyverse函数去除NA是有意义的。

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

请注意,您也可以在没有列规范的情况下使用drop_na();然后将删除任何列中具有NA的所有行。

答案 2 :(得分:3)

不确定您是否已解决问题。对于此问题,您可以使用dplyr包中的“过滤器”功能。我们的想法是过滤您感兴趣的变量值不是NA的观察/行。接下来,使用这些过滤后的观察结果制作图表。您可以在下面找到我的代码,并注意数据框和变量的所有名称都是从问题提示中复制的。另外,我假设您了解管道操作员。

library(tidyverse) 

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

你应该能够删除剧情中令人讨厌的NAs。希望这有效:)

答案 3 :(得分:3)

此外,将na.rm = TRUE添加到geom_bar()也可以。

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

我在一个时间序列中遇到了一个循环而遇到了这个问题。删除丢失的数据,结果不受影响。

答案 4 :(得分:2)

尝试使用remove_missing代替vars = the_variable设置vars参数非常重要,否则remove_missing将删除任何列中包含NA的所有行!设置{{1} }将取消显示警告消息。

na.rm = TRUE

答案 5 :(得分:0)

从我的观点来看这个错误 “错误:美学必须是长度一,或与数据长度相同” 是指参数aes(x,y) 我尝试了na.omit()并且对我很好。