2016-06-14 26 views
8

Ho un dataframe con ID batch e i risultati di sei test eseguiti su ciascun batch. I dati si presenta così:R: numero di NA per riga nel dataframe

batch_id test1 test2 test3 test4 test5 test6 
001  0.121  NA 0.340 0.877 0.417 0.662 
002  0.229 0.108  NA 0.638  NA 0.574 

(ci sono alcune centinaia di righe in questa dataframe, una sola riga per batch_id)

Sto cercando un modo per contare quanti AN ci sono per ogni batch_id (per ogni riga). Credo che questo dovrebbe essere in grado di fare al massimo con poche righe di codice R, ma ho problemi a codificarlo. Qualche idea?

+1

@BenBolker In genere, ho l'impressione che le risposte ai post recenti siano spesso più appropriate, moderne o efficienti rispetto a quelle dei presunti duplicati, specialmente se il post duplicato ha diversi anni (non è il caso qui). In questo caso specifico, tuttavia, non sono nemmeno sicuro che abbiamo a che fare con un duplicato poiché la domanda collegata ha richiesto specificamente una soluzione 'dplyr', a differenza dell'OP di questo post. – RHertel

+0

OK, anche se questa particolare domanda non è così vecchia (febbraio di quest'anno) e le * risposte * (specialmente la risposta di @ windrunn3r.1990) si sovrappongono molto. Dovrei/votare votare per riaprire? –

+0

@BenBolker Non ho visto la domanda a cui ti sei collegato quando ho cercato una soluzione. La risposta a questa domanda di Justin è ciò che stavo cercando. Dovrei cancellare la mia domanda? – Shark7

risposta

14

Si potrebbe aggiungere una nuova colonna alla vostra struttura dati contenente il numero di NA valori per batch_id:

df$na_count <- apply(df, 1, function(x) sum(is.na(x))) 
+1

Grazie. Che funzioni. Ho finito per usare questo, che è un po 'più semplice:
'df $ na_count <- apply (is.na (df), 1, sum)' – Shark7

26

è possibile contare il NA s in ogni riga con questo comando:

rowSums(is.na(dat)) 

dove dat è il nome del tuo frame di dati.