如何从一个因子变量(以及 ggplot 图表)中删除 NA?

6
我有一个关于因子变量中NA的问题,因为ggplot会将它们包含在图表中,就好像它们是另一种类别/级别。我想删除缺失的数据。 很抱歉我目前没有代码可用,我试图从data()中找到的数据集中删除因子级别,但没有成功。
有人遇到过同样的问题吗?
我尝试了这里建议的解决方案Remove unused factor levels from a ggplot bar plot,但是我收到了一个错误

Error: unexpected symbol in: mycode

有人能提供一些建议吗?
此外,如果无法从ggplot代码内部删除它们,如何从因子变量中删除NA?
3个回答

6
假设你的数据在一个名为dat的数据框中: newdat <- dat[!is.na(dat$Factor), ] 不确定如何在ggplot代码内解决问题。

谢谢@Frank,它确实有效,有一个问题:它是否会在整个数据集中删除该因子变量中存在NA的情况? - Pulse
1
该命令表示每当is.na(dat$Factor)TRUE时,删除整行数据。 - Jota
@baptiste 我已经修改了代码以反映您的评论。我之前不知道它是这样工作的。感谢您的评论。 - Jota
@Frank,很抱歉我不是很理解,每次is.na(dat$Factor)TRUE时它会删除整行,你的意思是我需要在ggplot函数或其他函数中调用它吗? - Pulse
你可以这样做,也可以创建一个新的对象(例如newdat)来包含原始数据的子集。然后,在ggplot函数中使用新对象。 - Jota

2

以下是相关主题的答案:

在 ggplot2 中绘制 NA 的箱线图

简而言之,不是通常的做法:

ggplot(data=data)

使用
ggplot(data=na.omit(data[,c("var1","var2",...)])) 

在这里,var1、var2等是您正在绘制的变量。


简单而干净的解决方案。假设na.omit()drop_na()之间没有区别,后者将是惯用的Tidyverse写法,例如:ggplot( data = drop_na( data[ , c("var1" ,"var2" , ... ) ] ) ) - Clokman

2

我会这样使用qplot来代替ggplot:

qplot(x=column, data=subset(dataframe,!is.na(column)))

我希望这能有所帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接