When I use filter
from the dplyr
package to drop a level of a factor variable, filter
also drops the NA
values. Here's an example:
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
This does not seem ideal -- I only wanted to drop rows where var1 == 1
.
It looks like this is occurring because any comparison with NA
returns NA
, which filter
then drops. So, for example, filter(dat, !(var1 %in% 1))
produces the correct results. But is there a way to tell filter
not to drop the NA
values?
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…