这是我写的一小部分代码,以报告数据框中缺少值的变量。我试图想到一种更优雅的方法,它可能会返回数据。

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()

enter image description here

查看与非缺失有关的错过的位置通常很有用,这可以通过绘制散布图来实现:

ggplot(airquality,
       aes(x = Ozone,
           y = Solar.R)) +
 geom_miss_point()

enter image description here

或用于分类变量:

gg_miss_fct(x = riskfactors, fct = marital)

enter image description here

这些示例来自包装 小插图 这列出了其他有趣的可视化。

summary(airquality)

已经为您提供了此信息

vim 软件包还为数据提供了一些不错的数据图。

library("VIM")
aggr(airquality)

enter image description here

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

那是

  1. x[1] 看第一列

  2. is.na() 是的,如果是 NA

  3. sum() TRUE1, FALSE0

另一个图形替代方案 - plot_missing 功能来自优点 DataExplorer 包裹:

enter image description here

文档 还指出了以下事实:您可以保存此结果以进行其他分析 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)

enter image description here

非常相似 Amelia 输出的差异很小,即在开箱即用的情况下给予%s。

我认为Amelia库在处理丢失的数据方面做得很好,还包括可视化缺失行的地图。

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

enter image description here

您还可以运行以下代码将返回Na的逻辑值

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

另一种图形和互动方式是使用 is.na10 功能来自 heatmaply 图书馆:

library(heatmaply)

heatmaply(is.na10(airquality), grid_gap = 1, 
          showticklabels = c(T,F),
            k_col =3, k_row = 3,
            margins = c(55, 30), 
            colors = c("grey80", "grey20"))

enter image description here

可能无法与大型数据集合作。

如果您想为特定的列执行此操作,那么您也可以使用此功能

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

Expandar的软件包功能 prepare_missing_values_graph 可用于探索面板数据:

enter image description here

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top