85

これは、データフレームから値が欠落している変数をレポートするために作成した小さなコードです。私はこれを行うためのよりエレガントな方法を考えようとしています。おそらくdata.frameを返す方法ですが、行き詰まっています。

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

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

4

14 に答える 14

164

使用するだけsapply

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

によって作成されたマトリックスでapplyまたはを使用することもできますcolSumsis.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 
于 2011-11-29T20:29:21.837 に答える
9

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

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)

ここに画像の説明を入力してください

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

于 2018-07-02T07:09:52.970 に答える
8

map_dfpurrrで使用できます。

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
于 2017-01-27T02:58:29.093 に答える
6
summary(airquality)

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

VIMパッケージは、data.frameのいくつかの素晴らしい欠測データプロットも提供します

library("VIM")
aggr(airquality)

ここに画像の説明を入力してください

于 2016-11-10T20:08:02.157 に答える
4

より簡潔-:sum(is.na(x[1]))

あれは

  1. x[1]最初の列を見てください

  2. is.na()それが本当なら本当NA

  3. sum() TRUEです1FALSEです0

于 2015-04-11T13:34:00.507 に答える
4

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

ここに画像の説明を入力してください

ドキュメントは、この結果を保存して追加の分析を行うことができるという事実も指摘していますmissing_data <- plot_missing(data)

于 2018-02-13T02:12:53.373 に答える
2

欠落しているデータを確認するのに役立つもう1つの関数は、funModelingライブラリのdf_statusです。

library(funModeling)

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

df_status(iris.2)

これにより、各列のNAの数とパーセンテージがわかります。

于 2017-02-06T06:28:30.503 に答える
2

もう1つのグラフィカルなソリューションとして、visdat パッケージはを提供しますvis_miss

library(visdat)
vis_miss(airquality)

ここに画像の説明を入力してください

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

于 2017-12-03T23:37:16.417 に答える
1

Ameliaライブラリは、欠落データの処理に優れた役割を果たしていると思います。欠落行を視覚化するためのマップも含まれています。

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

ここに画像の説明を入力してください

次のコードを実行して、naの論理値を返すこともできます

row.has.na <- apply(training, 1, function(x){any(is.na(x))})
于 2017-04-19T09:44:44.430 に答える
1

もう1つのグラフィカルでインタラクティブな方法は、ライブラリ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"))

ここに画像の説明を入力してください

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

于 2018-08-27T04:05:58.430 に答える
1

dplyrカウントを取得するための解決策は次のとおりです。

summarise_all(df, ~sum(is.na(.)))

またはパーセンテージを取得するには:

summarise_all(df, ~(sum(is_missing(.) / nrow(df))))

また、欠落しているデータは醜く、一貫性がなくNA、ソースやインポート時の処理方法に応じてコード化されるとは限らないことにも注意してください。次の関数は、データと欠落していると見なしたいものに応じて微調整できます。

is_missing <- function(x){
  missing_strs <- c('', 'null', 'na', 'nan', 'inf', '-inf', '-9', 'unknown', 'missing')
  ifelse((is.na(x) | is.nan(x) | is.infinite(x)), TRUE,
         ifelse(trimws(tolower(x)) %in% missing_strs, TRUE, FALSE))
}

# sample ugly data
df <- data.frame(a = c(NA, '1', '  ', 'missing'),
                 b = c(0, 2, NaN, 4),
                 c = c('NA', 'b', '-9', 'null'),
                 d = 1:4,
                 e = c(1, Inf, -Inf, 0))

# counts:
> summarise_all(df, ~sum(is_missing(.)))
  a b c d e
1 3 1 3 0 2

# percentage:
> summarise_all(df, ~(sum(is_missing(.) / nrow(df))))
     a    b    c d   e
1 0.75 0.25 0.75 0 0.5
于 2020-03-14T12:45:53.893 に答える
0

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

length(which(is.na(airquality[1])==T))
于 2014-06-09T06:24:29.890 に答える
0

ExPanDaRのパッケージ関数prepare_missing_values_graphを使用して、パネルデータを調べることができます。

ここに画像の説明を入力してください

于 2019-04-05T04:11:09.633 に答える
0

配管については、次のように書くことができます。

# Counts 
df %>% is.na() %>% colSums()

# % of missing rounded to 2 decimals 
df %>% summarise_all(.funs = ~round(100*sum(is.na(.))/length(.),2)) 
于 2021-12-10T09:46:04.720 に答える