报告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上使用apply或colSums 
 > 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])) 
那是
- 
x[1]看第一列 - 
is.na()如果是NA则is.na()true - 
sum()TRUE是1,FALSE是0 
 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))})