ggplot2警告:含非有限值行被移除,取消状态Y样本丢失求助
问题原因与解决方法
原因分析
- 标记为
cancel_status = "Y"的取消航班,其dep_time(实际起飞时间)本身就是NA,用这个NA值计算sche_dep_hour、sche_dep_min和sche_dep_exact_time时,结果也会变成NA。 - ggplot的
stat_boxplot()函数会自动剔除包含非有限值(这里就是NA)的行,所以这8255条取消航班的数据被直接过滤,导致绘图时看不到cancel_status = "Y"的组。
解决方法
取消航班没有实际起飞时间,但有计划起飞时间sched_dep_time,我们应该用这个字段来计算计划起飞的精确时间,修改变量生成代码如下:
flights_cancel_status <- flights %>% mutate(cancel_status = ifelse(is.na(dep_time), "Y", "N"), sche_dep_hour = sched_dep_time %/% 100, sche_dep_min = sched_dep_time %% 100, sche_dep_exact_time = sche_dep_hour + sche_dep_min / 60)
再运行原绘图代码:
ggplot(data = flights_cancel_status) + geom_boxplot(mapping = aes(x = sche_dep_exact_time, y = cancel_status))
此时cancel_status = "Y"的样本会拥有有效的sche_dep_exact_time值,绘图时会正常显示两组的箱线图,也不会再出现行被移除的警告。
内容的提问来源于stack exchange,提问作者Ryan
相关产品推荐
相关产品推荐

