2014-06-29 20 views
5

Qualcuno potrebbe spiegare perché ottengo risposte diverse utilizzando la funzione di aggregazione per contare i valori mancanti per gruppo? Inoltre, c'è un modo migliore per contare i valori mancanti per gruppo utilizzando una funzione R nativa?Numero R NA per gruppo

DF <- data.frame(YEAR=c(2000,2000,2000,2001,2001,2001,2001,2002,2002,2002), X=c(1,NA,3,NA,NA,NA,7,8,9,10)) 
DF 

aggregate(X ~ YEAR, data=DF, function(x) { sum(is.na(x)) }) 
with(DF, aggregate(X, list(YEAR), function(x) { sum(is.na(x)) })) 

aggregate(X ~ YEAR, data=DF, function(x) { sum(! is.na(x)) }) 
with(DF, aggregate(X, list(YEAR), function(x) { sum(! is.na(x)) })) 

risposta

10

La pagina di aiuto alla ?aggregate sottolinea che il metodo formula ha un argomento na.action che per impostazione predefinita na.omit.

na.action: una funzione che indica cosa deve accadere quando i dati contengono NA valori. L'impostazione predefinita è di ignorare i valori mancanti nelle variabili date.

Change che l'argomento a NULL o na.pass invece per ottenere i risultati si sono probabilmente aspettate:

# aggregate(X ~ YEAR, data=DF, function(x) {sum(is.na(x))}, na.action = na.pass) 
aggregate(X ~ YEAR, data=DF, function(x) {sum(is.na(x))}, na.action = NULL) 
# YEAR X 
# 1 2000 1 
# 2 2001 3 
# 3 2002 0 
-1
library(dplyr) 
library(tidyr) 

#say you want to get missing values from group 1 
dataframe %>% filter(group = 1 & is.na(another_column)) 

#missing values from group 2 
dataframe %>% filter(group = 2 & is.na(another_column))