40

这是一个非常基本的问题,因为我刚开始使用 R,但我正在尝试在 ggplot2 中创建因子计数的条形图,并且在绘图时,得到 14 个代表我的实际水平的小彩色光点,然后是一个巨大的灰色条end 代表样本中的 5000-ish 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()到 the_variable 或 MyData 和 the_variable 也是如此。

我想做的就是从我的图表中消除巨大的 NA 条,有人可以帮我这样做吗?

4

6 回答 6

45

可以使用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")
于 2016-04-21T19:37:03.297 回答
25

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

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

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

于 2017-12-01T21:41:50.407 回答
17

此外,将 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)

我在时间序列中遇到了这个问题,并解决了这个问题。删除丢失的数据,否则结果不受影响。

于 2018-06-15T17:28:44.130 回答
10

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

library(tidyverse) 

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

您应该能够删除情节上烦人的 NA。希望这有效:)

于 2018-01-11T02:45:48.540 回答
10

尝试remove_missing使用vars = the_variable. 设置vars参数非常重要,否则remove_missing将删除任何列中包含的所有行NA设置na.rm = TRUE将抑制警告信息。

ggplot(data = remove_missing(MyData, na.rm = TRUE, vars = the_variable),aes(x= the_variable, fill=the_variable, na.rm = TRUE)) + 
       geom_bar(stat="bin") 
于 2018-08-28T16:38:57.977 回答
0

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

于 2017-05-29T18:52:48.717 回答