0Pricing
R Academy · レッスン

欠損値の検出とカウント

is.na()、anyNA()、sum(is.na())を使って欠損データを点検します。

「欠損値の検出とカウント」はCoddyKit上の無料R Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはR Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 R Academyコースには全4レッスンが含まれています。

is.na() — 基本的な検出ツール

is.na(x) は x の各要素を検査し、同じ長さのlogical ベクトルを返します。値が NA(または NaN)である位置は TRUE になります。これは欠損値を検出する基本的なツールです。

heights <- c(175, NA, 162, 188, NA, 170, NA, 165)
cat('Heights:', heights, '
')
cat('is.na() :', is.na(heights), '
')
cat('!is.na():', !is.na(heights), '
')

sum(is.na()) による NA のカウント

算術演算では TRUE == 1、FALSE == 0 となるため、sum(is.na(x)) で欠損値の総数を数えられます。mean(is.na(x)) では欠損値の割合が得られます。

survey <- c(8, NA, 6, NA, 9, 7, NA, 5, NA, 8)
cat('Survey responses:', survey, '
')
cat('Total NAs:    ', sum(is.na(survey)), '
')
cat('Total present:', sum(!is.na(survey)), '
')
cat('NA proportion:', mean(is.na(survey)), '
')
cat('NA percentage:', mean(is.na(survey)) * 100, '%
')

anyNA() — 存在をすばやく確認

anyNA(x) は、いずれかの要素が NA であれば単一の TRUE を、それ以外の場合は FALSE を返します。最初に見つかった NA の時点で処理を停止するため、any(is.na(x)) より高速です。

complete_data <- c(1, 2, 3, 4, 5)
incomplete_data <- c(1, 2, NA, 4, 5)

cat('anyNA(complete)  :', anyNA(complete_data), '
')    # FALSE
cat('anyNA(incomplete):', anyNA(incomplete_data), '
')  # TRUE

# Use in validation
if (anyNA(incomplete_data)) {
  cat('Warning: data contains missing values!
')
}

which(is.na()) — 位置を検索

which(is.na(x)) は、ベクトル内で欠損値があるインデックス(位置)を返します。どの観測値が欠損しているかを監査したり、対象を絞って補完したりする際に不可欠です。

temperatures <- c(22.1, NA, 19.8, NA, 25.1, NA, 17.3, 20.0)
cat('Temperatures:', temperatures, '
')

missing_pos <- which(is.na(temperatures))
cat('Missing at positions:', missing_pos, '
')
cat('Number missing:', length(missing_pos), '
')

# What values are NOT missing?
present_pos <- which(!is.na(temperatures))
cat('Present at positions:', present_pos, '
')

データフレーム内の NA をカウントする

データフレームに対して is.na(df) を実行すると、同じ次元の logical 行列が返されます。これを colSums() と組み合わせると、列ごとの欠損値の数を求められ、データ品質をすばやく監査できます。

# Simulate a small data frame
name_col <- c('Alice', 'Bob', 'Carol', 'Dave', 'Eve')
age_col  <- c(28, NA, 32, NA, 29)
sal_col  <- c(55000, 72000, NA, 90000, 61000)
scr_col  <- c(88, NA, 75, NA, NA)

cat('Age NAs:   ', sum(is.na(age_col)), '
')
cat('Salary NAs:', sum(is.na(sal_col)), '
')
cat('Score NAs: ', sum(is.na(scr_col)), '
')

colSums(is.na(df)) パターン

colSums(is.na(df)) というパターンは、データフレームの列ごとの欠損値を数える最も高速な方法です。各列に含まれる NA の数を示す、名前付き numeric ベクトルが返されます。

# Build a data frame manually
df <- data.frame(
  name   = c('Alice', 'Bob', 'Carol', 'Dave', 'Eve'),
  age    = c(28, NA, 32, NA, 29),
  salary = c(55000, 72000, NA, 90000, 61000),
  score  = c(88, NA, 75, NA, NA)
)
cat('Missing values per column:
')
print(colSums(is.na(df)))
cat('Total missing:', sum(is.na(df)), '
')

列ごとの NA の割合

行数で割ると、列ごとの欠損値の割合が得られます。列によって長さが異なる場合、生の件数よりも有用な情報になります。

df <- data.frame(
  x1 = c(1, NA, 3, NA, 5),
  x2 = c(NA, 2, NA, 4, NA),
  x3 = c(1, 2, 3, NA, 5)
)
n_rows <- nrow(df)
na_counts <- colSums(is.na(df))
na_pct <- round(na_counts / n_rows * 100, 1)

cat('NA counts:     '); print(na_counts)
cat('NA percentage: '); print(na_pct)

table(is.na()) — 度数を数える

table(is.na(x)) は、FALSE(値あり)と TRUE(欠損)の値がそれぞれいくつあるかを示す、名前付きの度数表を作成します。一目で簡単に確認できます。

responses <- c(5, NA, 8, 6, NA, 9, 7, NA, NA, 8)

cat('NA frequency table:
')
print(table(is.na(responses)))

# For multiple columns:
cat('Age table:
')
ages <- c(28, NA, 32, NA, 29)
print(table(is.na(ages)))

NA を含む行を検索する

データフレーム内で、少なくとも1つの欠損値を含む行を検索するには、apply(is.na(df), 1, any) を使用します。結果は logical ベクトルで、不完全な行が TRUE になります。

df <- data.frame(
  id     = 1:5,
  age    = c(28, NA, 32, NA, 29),
  salary = c(55000, 72000, NA, 90000, 61000)
)

# Which rows have at least one NA?
has_na <- apply(is.na(df), 1, any)
cat('Rows with any NA:', which(has_na), '
')
cat('Complete rows:   ', which(!has_na), '
')
cat('Complete row count:', sum(!has_na), '/', nrow(df), '
')

完全なデータセットを監査する

実践的な NA 監査の手順は、分析前に欠損値を数え、位置を特定し、報告してデータ品質を把握することです。次に、単独で使用できる監査関数を示します。

audit_na <- function(v, label) {
  n_total   <- length(v)
  n_missing <- sum(is.na(v))
  pct       <- round(n_missing / n_total * 100, 1)
  positions <- which(is.na(v))
  cat(label, ':', n_missing, '/', n_total,
      '(', pct, '%) NA at positions', positions, '
')
}

heights <- c(175, NA, 162, 188, NA, 170)
weights <- c(70, 85, NA, 92, 68, NA)
audit_na(heights, 'Height')
audit_na(weights, 'Weight')

NA 検出のまとめ

NA 検出ツールのクイックリファレンス:

  • is.na(x) — logical ベクトル:NA の位置が TRUE
  • anyNA(x) — 単一の TRUE/FALSE:NA が存在するか
  • sum(is.na(x)) — NA の件数
  • mean(is.na(x)) — NA の割合
  • which(is.na(x)) — NA の位置
  • colSums(is.na(df)) — 列ごとの NA の件数
  • table(is.na(x)) — NA と非 NA の度数表
x <- c(10, NA, 30, NA, 50, NA, 70)
cat('is.na:       ', is.na(x), '
')
cat('anyNA:       ', anyNA(x), '
')
cat('sum(is.na):  ', sum(is.na(x)), '
')
cat('mean(is.na): ', mean(is.na(x)), '
')
cat('which(is.na):', which(is.na(x)), '
')

理解度チェック

sum(is.na(c(1, NA, 3, NA, 5))) は何を返しますか。

復習:NA の検出とカウント

よくできました。このレッスンの重要なポイントは次のとおりです。

  • is.na(x) が基本ツールで、logical ベクトルを返す
  • sum(is.na(x)) は欠損値を数え、mean(is.na(x)) は割合を求める
  • anyNA(x) は NA の存在をすばやく確認する
  • which(is.na(x)) で NA の正確な位置が分かる
  • colSums(is.na(df)) はデータフレームを監査する標準的な方法
  • NA の検出に x == NA は決して使用せず、必ず is.na(x) を使用する
# Full audit of a data frame in 3 lines
df <- data.frame(a=c(1,NA,3), b=c(NA,2,NA), c=c(1,2,3))
cat('Per column:', colSums(is.na(df)), '
')
cat('Total:     ', sum(is.na(df)), '/', nrow(df)*ncol(df), '
')
cat('Complete rows:', sum(complete.cases(df)), '/', nrow(df), '
')

よくある質問

「欠損値の検出とカウント」レッスンは無料ですか?

はい。「欠損値の検出とカウント」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、R Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 R Academyコースには全4レッスンが含まれています。

「欠損値の検出とカウント」で何を学びますか?

is.na()、anyNA()、sum(is.na())を使って欠損データを点検します。 ブラウザで直接実行するハンズオンコードでR Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

R Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのR Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「欠損値の検出とカウント」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このR Academyレッスンでコードを書いて実行できますか?

はい。すべてのR Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. RにおけるNAの理解
  2. 欠損値の検出とカウント
  3. NA値の削除と置換
  4. 計算と集計におけるNA
← R Academyに戻る