Quando si utilizza filter
dal pacchetto dplyr
per eliminare un livello di una variabile fattore, filter
rilascia anche i valori NA
. Ecco un esempio:Perché il filtro di dplyr rilascia valori NA da una variabile fattore?
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
Questo non sembra l'ideale - volevo solo far cadere righe in cui var1 == 1
.
Sembra che questo si verifichi perché qualsiasi comparison with NA
returns NA
, che quindi filter
scende. Ad esempio, filter(dat, !(var1 %in% 1))
produce i risultati corretti. Ma c'è un modo per dire a filter
di non lasciare cadere i valori NA
?
@akrun Per qualche motivo non ho ricevuto questa notifica: P. Bene, ho pensato che l'OP già lo sa, come ha menzionato 'filter (dat,! (Var1% in% 1))' che è simile, ma penso che questo sarebbe l'unico modo per farlo con 'dplyr :: filter'. – LyzandeR
Non penso ci sia un modo per dire esplicitamente a 'filter' di non rilasciare i valori di' NA', ma in generale, le query logiche di NA possono essere gestite intuitivamente usando l'operatore di base '% in%' e la sua negazione, definita come ' % ni% <- Negate ('% in%') '. Quindi, potresti usare 'filter (dat, var1% ni% 1)' che funzionerà. Vedere http://stackoverflow.com/a/11303276/4269699 e http://stackoverflow.com/a/27015823/4269699 – wjchulme
Sì, conoscevo sia questo approccio sia l'approccio che @LyzandeR usava per una risposta . Sembra che il filtro non abbia un'opzione esplicita per "mantieni NA", quindi queste soluzioni alternative andranno bene. Grazie per l'aiuto. –