这是我编写的一小段代码,用于报告数据框中缺少值的变量。我正在尝试一种更优雅的方式来做这个,也许会返回一个data.frame,但是我被困住了:
for (Var in names(airquality)) {
missing <- sum(is.na(airquality[,Var]))
if (missing > 0) {
print(c(Var,missing))
}
}
编辑:我正在处理包含数十到数百个变量的data.frames,因此我们只报告缺少值的变量是关键。
只需使用sapply
> sapply(airquality, function(x) sum(is.na(x)))
Ozone Solar.R Wind Temp Month Day
37 7 0 0 0 0
你也可以在apply
创建的矩阵上使用colSums
或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
如果您想为特定列执行此操作,则还可以使用此列
is.na10
ExPanDaR的包函数length(which(is.na(airquality[1])==T))
可用于探索面板数据:
install.packages("Amelia")
library(Amelia)
missmap(airquality)
我们可以使用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
更简洁 - :sum(is.na(x[1]))
那是
x[1]
看第一栏is.na()
如果是NA
,则为truesum()
我最喜欢(不太宽)的数据是来自优秀的TRUE
包的方法。您不仅可以获得频率,还可以获得缺失模式:
1
FALSE
通过绘制带有缺失的散点图,可以看出缺失与非缺失相关的位置通常很有用:
0
或者对于分类变量:
library(naniar)
library(UpSetR)
riskfactors %>%
as_shadow_upset() %>%
upset()
这些示例来自ggplot(airquality,
aes(x = Ozone,
y = Solar.R)) +
geom_miss_point()
包,其中列出了其他有趣的可视化。
另一个图形替代 - 功能来自优秀的
gg_miss_fct(x = riskfactors, fct = marital)
包:
vignette还指出,您可以使用plot_missing
保存此结果以进行其他分析。
另一个可以帮助你查看缺失数据的函数是来自funModeling库的df_status
missing_data <- plot_missing(data)
iris.2是带有一些NAs的虹膜数据集。您可以用数据集替换它。
summary(airquality)
这将为您提供每列中NAs的数量和百分比。
对于另一个图形解决方案,library("VIM")
aggr(airquality)
提供
library(funModeling)
。
df_status(iris.2)
visdat
非常类似于package输出,在开箱即用的缺失上给出%s的小差异。