2015-06-16 8 views
7

Ho due colonne numeriche score.a e score.b. Voglio creare una nuova variabile score.c che trasferisce il punteggio osservato da aob, ma quando sono osservati in entrambi, ho bisogno di prendere la media.Crea una nuova colonna in base a due altre colonne, ma nella media se osservata in entrambi

help <- data.frame(deid = c(5, 7, 12, 15, 25, 32, 42, 77, 92, 100, 112, 113), 
       score.a = c(NA, 2, 2, 2, NA, NA, NA, NA, NA, NA, 2, NA), 
       score.b = c(4, NA, NA, 4, 4, 4, NA, NA, 4, 4, NA, 4)) 

crea

deid score.a score.b 
1  5  NA  4 
2  7  2  NA 
3 12  2  NA 
4 15  2  4 
5 25  NA  4 
6 32  NA  4 
7 42  NA  NA 
8 77  NA  NA 
9 92  NA  4 
10 100  NA  4 
11 112  2  NA 
12 113  NA  4 

e spero di creare un df che assomiglia

 deid score.a score.b score.c 
1  5  NA  4  4 
2  7  2  NA  2 
3 12  2  NA  2 
4 15  2  4  3 
5 25  NA  4  4 
6 32  NA  4  4 
7 42  NA  NA  NA 
8 77  NA  NA  NA 
9 92  NA  4  4 
10 100  NA  4  4 
11 112  2  NA  2 
12 113  NA  4  4 

per esempio, nella riga 4 si prende la media.

Il mio tentativo ha utilizzato help %>% group_by(deid) %>% mutate(score.c = (score.a + score.b)/2) ma questo ha gestito solo i dati osservati in entrambe le colonne.

risposta

6

Prova

help$score.c <- rowMeans(help[2:3], na.rm=TRUE) 

O un possibile approccio con dplyr (non testato a fondo)

library(dplyr) 
help %>% 
    mutate(val= (pmax(score.a, score.b, na.rm=TRUE)+ 
        pmin(score.a, score.b, na.rm=TRUE))/2) 
+0

bloccato su dplyr e dimenticato su rowMeans ... grazie, @akrun! – bpace

+0

@bpace Se è necessario fare in 'dplyr'. Prova 'help%>% mutate (val = (pmax (score.a, score.b, na.rm = TRUE) + pmin (score.a, score.b, na.rm = TRUE)/2)' – akrun

+0

buono a sapersi, grazie ... non ho dimestichezza con pmax() e pmin() quindi li verificherò – bpace

3

Una soluzione data.table potrebbe essere:

library(data.table) 
setDT(help) 
help[,.(rMean=rowMeans(.SD,na.rm = T)),.SDcols = c('score.a','score.b')] 
+0

Cosa c'è 'help <- setDT (help)'? 'setDT (aiuto)' modifica i dati * in posizione *. –

Problemi correlati