报告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))})