我想做与这个问题相反的事情,有点与这个问题相反,尽管那是关于传说,而不是情节本身。
其他问题似乎是在问如何“保持”未使用的因子水平。我实际上希望将我的删除。我有几个名称变量和几列(宽格式)变量属性,我用它们来创建大量条形图。这是一个可重现的示例:
library(ggplot2)
df <- data.frame(name=c("A","B","C"), var1=c(1,NA,2),var2=c(3,4,5))
ggplot(df, aes(x=name,y=var1)) + geom_bar()
我明白了:
我只想在我的条形图中显示具有相应 var
的名称(例如,B 不会有空白空间)。 如果我可以简单地更改输出文件名和
y=var
位,重用基本绘图代码将非常容易。如果可能的话,我不想只为了在每个图的结果上使用 droplevels 来对我的数据框进行子集化!
na.omit()
建议更新
library(ggplot2)
df <- data.frame(name=c("A","B","C"), var1=c(1,NA,2),var2=c(3,4,5), var3=c(NA,6,7))
ggplot(df, aes(x=name,y=var1)) + geom_bar()
我需要使用
na.omit()
来绘制
var1
,因为存在 NA。但由于 na.omit 确保所有列都存在值,因此该图也会删除
A
,因为它在 var3
中具有 NA。这与我的数据更相似。我总共有 15 条回复,其中充斥着 NA。我只想删除没有 current绘制的 y 向量值的因子水平,而不是在整个数据框中的 any 向量中具有 NA 的因子水平。
na.omit()
df
使用 NA
删除这些行
ggplot(na.omit(df), aes(x=name,y=var1)) + geom_bar()
根据您的更新,以下内容
ggplot(df[!is.na(df$var1), ], aes(x=name,y=var1)) + geom_bar()
工作正常,仅考虑
NA
中的
Var1
。鉴于您仅绘制 name
和 Var
,请将 na.omit()
应用于仅包含这些变量的数据框ggplot(na.omit(df[, c("name", "var1")]), aes(x=name,y=var1)) + geom_bar()
x[,c("name", "var1")]
应用 na.omit 来删除不需要的行(如Gavin Simpson 建议)
na.omit(x[,c("name", "var1")])
,然后绘制这些数据。我的 R/ggplot 相当生疏,我意识到可能有更干净的方法来实现这一点。
library(ggplot2)
df <- data.frame(name=c("A","B","C"), var1=c(1,NA,2),var2=c(3,4,5))
a1<-ggplot(df, aes(x=name,y=var1)) + geom_bar()
a1+scale_x_discrete(limits=c("A", "C"))