R Language
値がありません
サーチ…
前書き
変数が取る値がわからないときは、その値がNA
で示されていないと言います。
備考
欠損値は記号NA
(not available)で表されます。不可能な値(例えば、 sqrt(-1)
結果)は、記号NaN
(数値ではない)で表されます。
不足しているデータを調べる
anyNA
は、欠損値が存在するかどうかを報告します。 is.na
はis.na
欠損値を報告します。
vec <- c(1, 2, 3, NA, 5)
anyNA(vec)
# [1] TRUE
is.na(vec)
# [1] FALSE FALSE FALSE TRUE FALSE
ìs.na
は、算術演算(FALSE = 0、TRUE = 1)で整数値に強制される論理ベクトルを返します。これを使用して欠損値の数を調べることができます。
sum(is.na(vec))
# [1] 1
このアプローチを拡張すると、 データフレーム上でcolSums
とis.na
を使用して、カラムごとにNAsをカウントできます。
colSums(is.na(airquality))
# Ozone Solar.R Wind Temp Month Day
# 37 7 0 0 0 0
naniarパッケージ (現在githubには存在しますがCRANにはありません)は、不足している値を調べるためのツールを提供します。
NA値によるデータの読み書き
read.*
関数で表形式のデータセットを読むとき、Rは自動的に"NA"
ような欠損値を探します。ただし、欠損値は常にNA
表されるわけではありません。ドット( .
)、ハイフン( -
)または文字値(たとえばempty
)は、値がNA
であることを示します。 read.*
関数のna.strings
パラメータは、どのシンボル/キャラクタをNA
値として扱う必要があるかをRに伝えるために使用できます。
read.csv("name_of_csv_file.csv", na.strings = "-")
複数のシンボルをNA
として読み取る必要があることを示すこともできます。
read.csv('missing.csv', na.strings = c('.','-'))
同様に、 NA
sはカスタマイズされた文字列でwrite.csv
na
引数を使用して記述することができます。 テーブルを読み書きするための他のツールにも同様のオプションがあります。
異なるクラスのNAsの使用
記号NA
は、 logical
欠損値を示します。
class(NA)
#[1] "logical"
これは、他のアトミックベクトル型に強制的に変換することが容易であり、通常は必要な唯一のNA
ため、便利です。
x <- c(1, NA, 1)
class(x[2])
#[1] "numeric"
別のタイプの単一のNA
値が必要な場合は、 NA_character_
、 NA_integer_
、 NA_real_
またはNA_complex_
ます。ファンシークラスの欠損値については、通常NA_integer_
でサブセット化します。たとえば、欠損値を取得するDate:
class(Sys.Date()[NA_integer_])
# [1] "Date"
TRUE / FALSEおよび/またはNA
NA
論理型との論理演算子であるNA
戻りますNA
結果があいまいである場合。以下は、 NA OR TRUE
と評価されTRUE
少なくとも一面があると評価するのでTRUE
、しかしNA OR FALSE
を返すNA
我々がいるかどうかわからないのでNA
あったであろうTRUE
またはFALSE
NA | TRUE
# [1] TRUE
# TRUE | TRUE is TRUE and FALSE | TRUE is also TRUE.
NA | FALSE
# [1] NA
# TRUE | FALSE is TRUE but FALSE | FALSE is FALSE.
NA & TRUE
# [1] NA
# TRUE & TRUE is TRUE but FALSE & TRUE is FALSE.
NA & FALSE
# [1] FALSE
# TRUE & FALSE is FALSE and FALSE & FALSE is also FALSE.
これらのプロパティーは、 NA
を含むいくつかの列に基づいてデータ・セットをサブセット化する場合に役立ちます。
df <- data.frame(v1=0:9,
v2=c(rep(1:2, each=4), NA, NA),
v3=c(NA, letters[2:10]))
df[df$v2 == 1 & !is.na(df$v2), ]
# v1 v2 v3
#1 0 1 <NA>
#2 1 1 b
#3 2 1 c
#4 3 1 d
df[df$v2 == 1, ]
v1 v2 v3
#1 0 1 <NA>
#2 1 1 b
#3 2 1 c
#4 3 1 d
#NA NA NA <NA>
#NA.1 NA NA <NA>
欠損値の省略または置換
欠損値の記録
通常、欠落しているデータはデータセットでNA
としてコード化されていません。例えば、SPSSでは、欠損値は値99
表されることが多い。
num.vec <- c(1, 2, 3, 99, 5)
num.vec
## [1] 1 2 3 99 5
サブセッティングを使用してNAを直接割り当てることが可能です
num.vec[num.vec == 99] <- NA
しかし、以下のようにis.na<-
を使用するのが好ましい方法です。ヘルプファイル( ?is.na
)の状態:
is.na<-
は、欠けを設定する安全な方法を提供するかもしれません。それは、例えば、要因に対して異なる挙動を示す。
is.na(num.vec) <- num.vec == 99
両方のメソッドが戻ります
num.vec
## [1] 1 2 3 NA 5
欠損値の削除
欠損値は、ベクトルからいくつかの方法で削除できます。
num.vec[!is.na(num.vec)]
num.vec[complete.cases(num.vec)]
na.omit(num.vec)
## [1] 1 2 3 5
計算から欠損値を除外する
欠損値を持つベクトルに対して算術関数を使用すると、欠損値が返されます。
mean(num.vec) # returns: [1] NA
na.rm
パラメータは、関数にNA
値を計算から除外するように指示します。
mean(num.vec, na.rm = TRUE) # returns: [1] 2.75
# an alternative to using 'na.rm = TRUE':
mean(num.vec[!is.na(num.vec)]) # returns: [1] 2.75
lm
ようないくつかのR関数には、 na.action
パラメータがあります。これのデフォルト値はna.omit
ですが、 options(na.action = 'na.exclude')
ではRのデフォルトの動作を変更できます。
デフォルト動作を変更する必要はないが、特定の状況では別のna.action
が必要な場合は、 na.action
パラメータを関数呼び出しに含める必要があります。
lm(y2 ~ y1, data = anscombe, na.action = 'na.exclude')