I因子変数のレベルをドロップするdplyr
パッケージからfilter
を使用する場合、filter
もNA
値が低下します。ここでは例です:dplyrのフィルタは因子変数からNA値を落とすのはなぜですか?
library(dplyr)
set.seed(919)
(dat <- data.frame(var1 = factor(sample(c(1:3, NA), size = 10, replace = T))))
# var1
# 1 <NA>
# 2 3
# 3 3
# 4 1
# 5 1
# 6 <NA>
# 7 2
# 8 2
# 9 <NA>
# 10 1
filter(dat, var1 != 1)
# var1
# 1 3
# 2 3
# 3 2
# 4 2
これは理想的ないないようだ - 私はvar1 == 1
行をドロップしたかったです。
これはfilter
が、その後低下任意のcomparison with NA
returns NA
、ため、発生しているように見えます。したがって、たとえば、filter(dat, !(var1 %in% 1))
は正しい結果を生成します。しかしfilter
にNA
の値をドロップしないように指示する方法はありますか?
@akrun:P。まあ、彼は似ている 'フィルタ(%1でDAT、!(VAR1%))を'述べたように、私は、OPはすでにこのことについて知っていると思ったが、私は、これは 'dplyrでそれを行うための唯一の方法だと思う::フィルタ '。 – LyzandeR
'NA'値を落とさないように' filter'に明示的に指示する方法はないと思いますが、一般的に、論理NAクエリは、ベースの '%in% '演算子を使って直感的に扱うことができ、 %ni%< - 否定( '%in%') '。したがって、動作する 'filter(dat、var1%ni%1)'を使うことができます。 http://stackoverflow.com/a/11303276/4269699およびhttp://stackoverflow.com/a/27015823/4269699 – wjchulme
はい、私はこのアプローチと@LyzandeRが回答に使用したアプローチの両方について知っていました。 filterには "keep NA"の明示的なオプションがないようですので、これらの回避策は問題ありません。ご協力いただきありがとうございます。 –