web-dev-qa-db-ja.com

data.frameの欠損値を報告するエレガントな方法

これは、データフレームの欠損値を持つ変数を報告するために書いたコードの一部です。私はこれを行うためのよりエレガントな方法、おそらくdata.frameを返す方法を考えていますが、私は立ち往生しています:

for (Var in names(airquality)) {
    missing <- sum(is.na(airquality[,Var]))
    if (missing > 0) {
        print(c(Var,missing))
    }
}

編集:私は数十から数百の変数を持つdata.framesを扱っているので、欠損値を持つ変数のみを報告することが重要です。

71
Zach

sapplyを使用するだけです

> sapply(airquality, function(x) sum(is.na(x)))
  Ozone Solar.R    Wind    Temp   Month     Day 
     37       7       0       0       0       0

is.na()によって作成されたマトリックスで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 
138
Joshua Ulrich

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
7
Keiku

(あまり広くない)データの私のお気に入りは、優れた naniar パッケージのメソッドです。周波数を取得するだけでなく、欠落のパターンも取得します。

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

これらの例は、パッケージ vignette からのもので、他の興味深い視覚化をリストしています。

5
radek

もっと簡潔に:sum(is.na(x[1]))

あれは

  1. x[1]最初の列を見る

  2. is.na()NAの場合はtrue

  3. sum()TRUE1FALSE0です

5
summary(airquality)

すでにこの情報を提供しています

VIMパッケージは、data.frameのニース欠損データプロットも提供します。

library("VIM")
aggr(airquality)

enter image description here

4
stats0007

別のグラフィカルな代替-優れたDataExplorerパッケージのplot_missing関数:

enter image description here

Docs は、missing_data <- plot_missing(data)を使用して追加の分析のためにこの結果を保存できるという事実も指摘しています。

4
radek

欠落データを調べるのに役立つ別の関数は、funModelingライブラリのdf_statusです

library(funModeling)

iris.2は、NAが追加されたアイリスデータセットです。これをデータセットに置き換えることができます。

df_status(iris.2)

これにより、各列のNAの数と割合がわかります。

2

もう1つのグラフィカルなソリューションとして、visdatpackagevis_missを提供します。

library(visdat)
vis_miss(airquality)

enter image description here

Amelia出力と非常によく似ていますが、箱から出して不足している部分に%sを与えるというわずかな違いがあります。

1
radek

別のグラフィカルでインタラクティブな方法は、heatmaplyライブラリのis.na10関数を使用することです。

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

おそらく、大規模なデータセットではうまく機能しません。

1
radek

特定の列に対してそれを行いたい場合は、これを使用することもできます

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

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))})
0
drexxx

ExPanDaRのパッケージ関数 prepare_missing_values_graph は、パネルデータの探索に使用できます。

enter image description here

0
radek