私はいくつかのNA
値を持つ巨大なベクトルを持っています、そして私はそのベクトルの中で最大値を見つけようとしています(ベクトルはすべての数です)、しかし私はNA
値のためこれをすることができません。
最大値を計算するためにNA
の値を削除する方法を教えてください。
?max
を試すと、実際にはna.rm =
引数があり、デフォルトではFALSE
に設定されています。 (これはsum()
、mean()
などを含む他の多くのR関数の一般的なデフォルトです)
na.rm=TRUE
を設定することはあなたが求めていることだけをします:
d <- c(1, 100, NA, 10)
max(d, na.rm=TRUE)
NA
をすべて削除したい場合は、代わりにこのイディオムを使用してください。
d <- d[!is.na(d)]
最後の注意:他の関数(例えばtable()
、lm()
、およびsort()
)は、異なる名前を使用する(そして異なるオプションを提供する)NA
関連の引数を持ちます。そのため、NA
が関数呼び出しで問題を引き起こす場合は、関数の引数の中に組み込みの解決策があるかどうかをチェックする価値があります。私は通常がすでにそこにあるのを見つけました。
na.omit
関数は、多くの回帰ルーチンが内部で使用しているものです。
vec <- 1:1000
vec[runif(200, 1, 1000)] <- NA
max(vec)
#[1] NA
max( na.omit(vec) )
#[1] 1000
?max
は、TRUE
に設定できる追加のパラメーターna.rm
があることを示しています。
それとは別に、あなたが本当にNA
sを削除したいのなら、以下のようにしてください。
myvec[!is.na(myvec)]
max(vector, na.rm = TRUE)
を呼び出すことができます。より一般的には、na.omit()
関数を使うことができます。
万が一Rに不慣れな人が、元の質問に対する簡単な答えを求めている場合
ベクトルからNA値を削除する方法
ここにあります:
次のようにベクトルfoo
があるとします。
foo = c(1:10, NA, 20:30)
length(foo)
を実行すると22になります。
nona_foo = foo[!is.na(foo)]
NA値が削除されたため、length(nona_foo)
は21です。
is.na(foo)
はブール値の行列を返すので、この値の反対でfoo
をインデックスするとNAではないすべての要素が得られます。
discard
frompurrr を使用します(リストとベクターで動作します)。
discard(v, is.na)
利点は、パイプが使いやすいことです。または、組み込みのサブセット関数[
を使用します。
v %>% discard(is.na)
v %>% `[`(!is.na(.))