data.frames を何らかの条件でサブセット化する場合、データ フレームに NA が含まれていると、条件の結果として NA 値が得られることがあります。次に、data.frame のサブセット化で問題が発生します。
# data generation
set.seed(123)
df <- data.frame(a = 1:100, b = sample(c("moon", "venus"), 100, replace = TRUE), c = sample(c('a', 'b', NA), 100, replace = TRUE))
# indexing
with(df, df[a < 30 & b == "moon" & c == "a",])
あなたは得る:
a b c
NA NA <NA> <NA>
10 10 moon a
12 12 moon a
NA.1 NA <NA> <NA>
NA.2 NA <NA> <NA>
29 29 moon a
これは、条件が NA を含むベクトルになり、これらの NA がデータ フレームのインデックス作成で上記の結果を生成するために発生します。
解決策の 1 つは、次の修正のいずれかです。
with(df, df[a < 30 & b == "moon" & (c == "a" & !is.na(c)),]) # exclude NAs
with(df, df[a < 30 & b == "moon" & (c == "a" | is.na(c)),]) # include NAs
しかし、これらはかなり不器用です - のような長い条件が
df[A == x1 & B == x2 & C == x3 & D == x4,]
あり、各要素をこのようにラップする必要があると想像してください - df[(A == x1 | is.na(A)) & (B == x2 | is.na(B)) ...,]
。
データフレームを検査しようとするだけで、コンソールにこれらの大量のコードを書く必要のない、この問題に対するエレガントな解決策はありますか?