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

问题描述 投票:68回答:12

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

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

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

r dataframe missing-data
12个回答
139
投票

只需使用sapply

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

你也可以在apply创建的矩阵上使用colSumsis.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 

0
投票

如果您想为特定列执行此操作,则还可以使用此列

is.na10

0
投票

我认为Amelia库在处理缺失数据方面做得很好,还包括一个可视化缺失行的地图。

heatmaply

library(heatmaply) heatmaply(is.na10(airquality), grid_gap = 1, showticklabels = c(T,F), k_col =3, k_row = 3, margins = c(55, 30), colors = c("grey80", "grey20"))

您还可以运行以下代码将返回na的逻辑值

enter image description here

0
投票

ExPanDaR的包函数length(which(is.na(airquality[1])==T)) 可用于探索面板数据:

install.packages("Amelia") library(Amelia) missmap(airquality)


7
投票

我们可以使用map_df和purrr。

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

5
投票

更简洁 - :sum(is.na(x[1]))

那是

  1. x[1]看第一栏
  2. is.na()如果是NA,则为true
  3. qazxsw poi qazxsw poi是qazxsw poi,qazxsw poi是sum()

5
投票

我最喜欢(不太宽)的数据是来自优秀的TRUE包的方法。您不仅可以获得频率,还可以获得缺失模式:

1

FALSE

通过绘制带有缺失的散点图,可以看出缺失与非缺失相关的位置通常很有用:

0

naniar

或者对于分类变量:

library(naniar)
library(UpSetR)

riskfactors %>%
  as_shadow_upset() %>%
  upset()

enter image description here

这些示例来自ggplot(airquality, aes(x = Ozone, y = Solar.R)) + geom_miss_point() 包,其中列出了其他有趣的可视化。


4
投票

另一个图形替代 - enter image description here功能来自优秀的gg_miss_fct(x = riskfactors, fct = marital) 包:

enter image description here

vignette还指出,您可以使用plot_missing保存此结果以进行其他分析。


4
投票
DataExplorer

已经给你这个信息

VIM软件包还为data.frame提供了一些不错的缺失数据图

enter image description here

Docs


2
投票

另一个可以帮助你查看缺失数据的函数是来自funModeling库的df_status

missing_data <- plot_missing(data)

iris.2是带有一些NAs的虹膜数据集。您可以用数据集替换它。

summary(airquality)

这将为您提供每列中NAs的数量和百分比。


1
投票

对于另一个图形解决方案,library("VIM") aggr(airquality) enter image description here提供library(funModeling)

df_status(iris.2)

visdat

非常类似于package输出,在开箱即用的缺失上给出%s的小差异。


1
投票

另一种图形和交互方式是使用vis_miss库中的library(visdat) vis_miss(airquality) 函数:

enter image description here

Amelia

可能不适用于大型数据集..

© www.soinside.com 2019 - 2024. All rights reserved.