如何删除多变量时间序列的NA,以便使用ggplot绘制boxplot?

时间:2018-03-08 09:29:02

标签: r ggplot2 dplyr tidyr

我有一个包含“溶解氧(时间序列)”的数据框,如下所示:

head(DO):
Month Season       site1   site2  site3   site4     site5 site6
1   Dec Winter       NA      3.0   0.00     5.60    4.1   3.8
2   Jan Winter       0.0     0.0   NA       5.70    4.0   6.0
3   Feb Winter       0.0     NA    0.00     3.30    1.6   5.5
4   Mar Spring       0.2     1.9   0.00     6.20    NA    8.5
5   Apr Spring       0.0     0.5   3.95     5.00    NA    7.7
6   May Spring       0.0     1.5   1.18     6.50    NA    5.9

我想使用ggplot绘制框图,以便查看不同网站的变化。请注意,月份和季节被视为因子。 我用过:

library(reshape2) 
DO.m <- melt(DO, id=c("Month", "Season"))

当我运行上面的代码时,我得到了如下警告:

Warning message:
attributes are not identical across measure variables; they will be dropped.

但是我忽略了警告并尝试使用以下方式绘制数据(如论坛所示)

ggplot(subset(DO.m, !is.na(value)), aes(x=variable,y=value, col=variable)) +
    geom_boxplot(outlier.colour = "red", outlier.size = 1) + 
    labs(title = "DO", x = "Station", y = "DO(mg/l)", color = "Station") +
  geom_jitter(alpha= 0.4, shape=16, position=position_jitter(0.2)) 

上面的代码绘制了非常抽象的图像,这不是一个盒子图。 那么如何从融化数据中删除所有站点的NA?你的帮助会很高兴

1 个答案:

答案 0 :(得分:0)

尝试传递na.rm = TRUE以融化:

library(reshape2)
DO.m <- melt(DO, id=c("Month", "Season"), na.rm = TRUE)

就删除属性以及是否可能导致任何问题而言,数据子集的输入将会有所帮助。但无论如何,让熔化拉出NA值可能是最好的地方。

我添加了一个问题,您是否已经检查了ggplot2的不同图层,以便一次查看它们产生的图层。例如,当你只使用ggplot图层+ geom_boxplot图层而没有geom_jitter

时,你得到的东西吗?