Basics-RにおけるNULL,NA,NaNの処理

1713 ワード

に質問

NULLNA(Not Available)、NaN(Not a Number)を正しく処理したい.

イニシアチブ


あなたのデータは、NULLNANaNに存在することがあります.これらのデータを処理するには、「通常」の値とは異なり、決定的なテストが必要になる場合があります.
これらの値を比較した例を次に示します.
x  5
# logical(0)

y  5
# NA

z  5
# NA

変数が値の1つであるかどうかをテストする方法:
is.null(x)
# TRUE

is.na(y)
# TRUE

is.nan(z)
# TRUE

なお、NULLは他の2つとは異なる.NULLは値がないことを意味し、NAおよびNaNは値があることを意味するが、使用できない可能性がある.次の例で区別します.
# Is y null?
is.null(y)
# FALSE

# Is x NA?
is.na(x)
# logical(0)
# Warning message:
# In is.na(x) : is.na() applied to non-(list or vector) of type 'NULL'

第1例は、yNULLであるかどうかを検査し、結果yはそうではない.第2の例では、xNAであるかどうかを確認しようとしたが、値は検出されなかった.

ベクトル要約関数の「悪い」値を無視

NAまたはNaNを含むベクトルに対してmean()またはsum()のような関数を使用すると、結果はNAおよびNaNを返します.これは通常意味がありませんが、このような結果は「悪い」値の存在を注意します.多くの関数には、これらの値を無視できるna.rmがあります.
vy 

ベクトルから[悪い値](Hard Value)を除去するには


これらの値は、is.na()またはis.nan()の逆関数を使用して削除できます.
vy
# 1  2  3 NA  5
vy[!is.na(vy)]
# 1  2  3  5

vz
# 1   2   3 NaN   5
vz[!is.nan(vz)]
# 1  2  3  5

に注意


無限値Infおよび-Infと、それに対応する関数is.finite()およびis.infinite()もある.
参照/Manipulating data/comparing vectors or factors with NA
テキストリンク:http://www.cookbook-r.com/Basics/Working_with_NULL_NA_and_NaN/