2016-02-16 19 views
6

Ho un frame di dati e ho bisogno di aggiungere un'altra colonna ad esso che mostra il conteggio di NAs in tutte le altre colonne per quella riga e anche la media del valori non NA. Penso che possa essere fatto in dplyr.Aggiungere una colonna con il conteggio di NA e Mean in R con dplyr

> df1 <- data.frame(a = 1:5, b = c(1,2,NA,4,NA), c = c(NA,2,3,NA,NA)) 
> df1 
    a b c 
1 1 1 NA 
2 2 2 2 
3 3 NA 3 
4 4 4 NA 
5 5 NA NA 

voglio mutare un'altra colonna che conta il numero di AN in quella riga e un'altra colonna che mostra la media di tutti i valori NON-NA in quella riga.

Si prega di assistere.

+1

Questo generalmente non è un forum per chiedici di scrivere il tuo codice per te Che cosa hai provato? Perché vuoi usare 'dplyr'? FWIW, questo può essere fatto nella base R abbastanza facilmente in qualsiasi numero di modi. Uno è: 'df1 $ na <- applica (is.na (df1), 1, sum)' – Justin

+0

Il modo 'dplyr' è descritto qui: http://stackoverflow.com/questions/21818181/applying-a-function -a-ogni-fila-di-una-tabella-usando-dplyr –

risposta

9
library(dplyr) 

count_na <- function(x) sum(is.na(x)) 

df1 %>% 
    mutate(means = rowMeans(., na.rm = T), 
     count_na = apply(., 1, count_na)) 
+0

Come modificherebbe questa soluzione per funzionare solo sulle colonne scelte? Ad esempio, b & c? – radek

+0

@radek vedi la mia risposta in questa pagina –

6

Si può provare questo:

#Find the row mean and add it to a new column in the dataframe 
df1$Mean <- rowMeans(df1, na.rm = TRUE) 

#Find the count of NA and add it to a new column in the dataframe 
df1$CountNa <- rowSums(apply(is.na(df1), 2, as.numeric)) 
2

Come accennato qui https://stackoverflow.com/a/37732069/2292993

df1 <- data.frame(a = 1:5, b = c(1,2,NA,4,NA), c = c(NA,2,3,NA,NA)) 

df1 %>% 
    mutate(means = rowMeans(., na.rm = T), 
     count_na = rowSums(is.na(.))) 

a lavorare su colli selezionati (l'esempio qui è per Col una e col c):

df1 %>% 
    mutate(means = rowMeans(., na.rm = T), 
     count_na = rowSums(is.na(select(.,one_of(c('a','c')))))) 
Problemi correlati