这里非常基本的问题因为我刚刚开始使用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栏,有人可以帮我这样做吗?
答案 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答案的更新。
由于ggplot2
是tidyverse
的一部分,因此使用方便的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()并且对我很好。