题
这是我写的一小部分代码,以报告数据框中缺少值的变量。我试图想到一种更优雅的方法,它可能会返回数据。
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
其他提示
我们可以用 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
我最喜欢的(不太宽)的数据是优秀的方法 纳米 包裹。不仅您获得了频率,而且还会有缺失的模式:
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)
这些示例来自包装 小插图 这列出了其他有趣的可视化。
更简洁 - : sum(is.na(x[1]))
那是
x[1]
看第一列is.na()
是的,如果是NA
sum()
TRUE
是1
,FALSE
是0
另一个图形替代方案 - plot_missing
功能来自优点 DataExplorer
包裹:
文档 还指出了以下事实:您可以保存此结果以进行其他分析 missing_data <- plot_missing(data)
.
另一个可以帮助您查看丢失数据的功能是FunModeling库中的DF_STATU
library(funModeling)
Iris.2是带有一些添加NAS的IRIS数据集。您可以用数据集替换它。
df_status(iris.2)
这将为您提供每列中NAS的数量和百分比。
对于另一种图形解决方案, visdat
包裹 优惠 vis_miss
.
library(visdat)
vis_miss(airquality)
非常相似 Amelia
输出的差异很小,即在开箱即用的情况下给予%s。
如果您想为特定的列执行此操作,那么您也可以使用此功能
length(which(is.na(airquality[1])==T))
Expandar的软件包功能 prepare_missing_values_graph
可用于探索面板数据:
不隶属于 StackOverflow