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

这是我写的一段代码,用于从数据框中报告具有缺失值的variables。 我试图想到一个更优雅的方式来做到这一点,可能会返回一个data.frame,但我卡住了:

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

编辑:我正在处理与数十到数百个variables的data.frames,所以关键是我们只报告缺less值的variables。

只需使用sapply

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

你也可以在由is.na()创build的matrix上使用applycolSums

 > 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 

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

那是

  1. x[1]看第一列

  2. is.na()如果是NAis.na() true

  3. sum() TRUE1FALSE0

 summary(airquality) 

已经给你这个信息

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

 library("VIM") aggr(airquality) 

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

 library(funModeling) 

iris.2是一些添加了NAs的虹膜数据集。您可以将其replace为您的数据集。

 df_status(iris.2) 

这会给你每个栏目的新join人数和百分比。

我们可以使用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 

如果你想要做特定的列,那么你也可以使用这个

 length(which(is.na(airquality[1])==T)) 

我认为阿米莉亚图书馆在处理缺失数据方面做得不错,还包括一张用于可视化缺失行的地图。

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

你也可以运行下面的代码将返回na的逻辑值

 row.has.na <- apply(training, 1, function(x){any(is.na(x))})