2015-12-09 18 views
5

come ottenere la media di due colonne di una tabella di dati usando dplyr? Ad esempio, se i miei dati se come di seguito:Come ottenere la media di due colonne usando dplyr?

dt <- data.table(A=1:5, B=c(1,4,NA,6,8)) 

voglio creare una nuova colonna "Media", che è la media della colonna A e B per ogni riga:

dt %>% mutate(Avg=mean(c(A, B), na.rm=T)) 

Ma questo codice non mi dà il risultato corretto Come fare questo? Grazie mille.

+1

si ha realmente bisogno di 'dplyr'? –

+0

Il calcolo medio è un passo di tutti i miei calcoli, ho bisogno di usare dplyr per gli altri calcoli. – Carter

+0

http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem –

risposta

11

Se si desidera utilizzare dplyr per raggiungere questo obiettivo, vi suggerirei di usare la funzione rowwise():

R> library(dplyr) 
    R> dt <- data.table(A=1:5, B=c(1,4,NA,6,8)) 
    R> j <- dt %>% rowwise() %>% mutate(Avg=mean(c(A, B), na.rm=T)) 
    R> j 
Source: local data frame [5 x 3] 
Groups: <by row> 

     A  B Avg 
    (int) (dbl) (dbl) 
1  1  1 1.0 
2  2  4 3.0 
3  3 NA 3.0 
4  4  6 5.0 
5  5  8 6.5 
6

Come su

dt %>% mutate(Avg=rowMeans(cbind(A, B), na.rm=T)) 

mean non è Vettorializzare. Collassa tutti gli input su un singolo valore. Se si crea una matrice con cbind(), è possibile utilizzare rowMeans per eseguire il trucco.

+0

questa era l'unica soluzione funzionante per me, molte grazie. –

1

Come il set di dati iniziale è data.table, potremmo usare data.table metodi

dt[, Avg:= mean(unlist(.SD), na.rm=TRUE) , .1:nrow(dt)] 
dt 
# A B Avg 
#1: 1 1 1.0 
#2: 2 4 3.0 
#3: 3 NA 3.0 
#4: 4 6 5.0 
#5: 5 8 6.5 
Problemi correlati