报告data.frame中缺失值的优雅方法

Zac*_*ach 72 r missing-data dataframe

这是我编写的一小段代码,用于报告数据框中缺少值的变量.我正在尝试一种更优雅的方式来做这个,也许会返回一个data.frame,但是我被困住了:

for (Var in names(airquality)) {
    missing <- sum(is.na(airquality[,Var]))
    if (missing > 0) {
        print(c(Var,missing))
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑:我正在处理包含数十到数百个变量的data.frames,因此我们只报告缺少值的变量是关键.

Jos*_*ich 143

只是用 sapply

> sapply(airquality, function(x) sum(is.na(x)))
  Ozone Solar.R    Wind    Temp   Month     Day 
     37       7       0       0       0       0
Run Code Online (Sandbox Code Playgroud)

您也可以使用applycolSums创建的矩阵is.na()

> apply(is.na(airquality),2,sum)
  Ozone Solar.R    Wind    Temp   Month     Day 
     37       7       0       0       0       0
> colSums(is.na(airquality))
  Ozone Solar.R    Wind    Temp   Month     Day 
     37       7       0       0       0       0 
Run Code Online (Sandbox Code Playgroud)

  • 我稍微修改了你的代码,只报告缺失值:`M < - sapply(airquality,function(x)sum(is.na(x))); M [M> 0]` (11认同)
  • @Zach我使用你的建议版本来检查必填字段是否有值:`M < - colSums(is.na(airquality)); M [M <= 0]` (2认同)

Kei*_*iku 7

我们可以使用map_dfpurrr.

library(mice)
library(purrr)

# map_df with purrr
map_df(airquality, function(x) sum(is.na(x)))
# A tibble: 1 × 6
# Ozone Solar.R  Wind  Temp Month   Day
# <int>   <int> <int> <int> <int> <int>
# 1    37       7     0     0     0     0
Run Code Online (Sandbox Code Playgroud)


rad*_*dek 6

我最喜欢(不太宽的)数据的是出色的naniar软件包中的方法。不仅您获得频率,而且获得缺失的模式:

library(naniar)
library(UpSetR)

riskfactors %>%
  as_shadow_upset() %>%
  upset()
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

通常可以通过绘制散点图与缺失来了解缺失与非缺失之间的关系:

ggplot(airquality,
       aes(x = Ozone,
           y = Solar.R)) +
 geom_miss_point()
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

或对于分类变量:

gg_miss_fct(x = riskfactors, fct = marital)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

这些示例来自包装插图,其中列出了其他有趣的可视化效果。

  • 感谢您发布此信息!最新版本中现在有一个专门的`gg_miss_upset()`函数,一旦他们从假期回来就会提交给CRAN。http://naniar.njtierney.com/reference/gg_miss_upset.html (2认同)

sta*_*007 5

summary(airquality)
Run Code Online (Sandbox Code Playgroud)

已经给你这个信息

VIM包还提供了一些不错的失踪data.frame数据图

library("VIM")
aggr(airquality)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明


rad*_*dek 5

另一个图形替代方案 -plot_missing来自优秀包的功能DataExplorer

在此输入图像描述

文档还指出,您可以保存此结果以使用 进行额外分析missing_data <- plot_missing(data)