2015-02-02 15 views
6

Anche se so come calcolare la media in R, non riesco a capire come farlo per condizioni diverse. Altri post che ho letto non erano così complicati.Calcola la media per ogni soggetto per condizioni diverse

>  Target/dictractor TrialType Bin0 Bin1 Bin2 Bin3 
1   Target    2C   3  0  2  0 
1   Target    2C   2  0  3  0 
1   Target    2E   0  1  1  2 
1   Target    2E   0  0  0  0 
1  Distractor   2C   0  3  0  1 
1  Distractor   2C   0  0  0  0 
1  Distractor   2E   0  0  1  0 
1  Distractor   2E   0  0  0  3 
2   Target    2C   1  1  0  1 
2   Target    2C   2  0  0  2 
2  Distractor   2E   0  0  0  0 
2  Distractor   2E   0  0  0  0 

Visti i set di dati di cui sopra mi piacerebbe ottenere la media di ogni bin (Bin0, Bin1, Bin2) per ciascun soggetto per ogni TrialType per Target/dictractor separatamente. Ad esempio, per soggetto 1 desidero calcolare la media di ogni scomparto, per TrialType2C, in una condizione Target, allora la media per ciascun intervallo di TrialType2E in una condizione Target, quindi significare per ciascun intervallo di TrialType2C in Distractor condizione e TrialType2E in Distractor.

+0

Hai visto 'aggregate()'? – Steven

+1

Per la buona descrizione della tua prima domanda con un campione di dati +1. :) – jazzurro

+1

'aggregato (. ~ Target.dictractor + TrialType + Oggetto, data = dat, FUN = mean)' lo farebbe per una soluzione 'aggregata'. – thelatemail

risposta

2

Un modo con il pacchetto dplyr è:

dati

df <- read.table(header=T,text=' Subject Target/dictractor TrialType Bin0 Bin1 Bin2 Bin3 
1   Target    2C   3  0  2  0 
1   Target    2C   2  0  3  0 
1   Target    2E   0  1  1  2 
1   Target    2E   0  0  0  0 
1  Distractor   2C   0  3  0  1 
1  Distractor   2C   0  0  0  0 
1  Distractor   2E   0  0  1  0 
1  Distractor   2E   0  0  0  3 
2   Target    2C   1  1  0  1 
2   Target    2C   2  0  0  2 
2  Distractor   2E   0  0  0  0 
2  Distractor   2E   0  0  0  0', stringsAsFactors=F) 

Soluzione

df %>% 
    group_by(Subject, Target.dictractor,TrialType) %>% 
    summarise(mean_Bin0=mean(Bin0), 
      mean_Bin1=mean(Bin1), 
      mean_Bin2=mean(Bin2), 
      mean_Bin3=mean(Bin3)) 

uscita

Source: local data frame [6 x 7] 
Groups: Subject, Target.dictractor 

    Subject Target.dictractor TrialType mean_Bin0 mean_Bin1 mean_Bin2 mean_Bin3 
1  1  Distractor  2C  0.0  1.5  0.0  0.5 
2  1  Distractor  2E  0.0  0.0  0.5  1.5 
3  1   Target  2C  2.5  0.0  2.5  0.0 
4  1   Target  2E  0.0  0.5  0.5  1.0 
5  2  Distractor  2E  0.0  0.0  0.0  0.0 
6  2   Target  2C  1.5  0.5  0.0  1.5 
+0

Lo proverò in questo modo grazie! –

3

Ecco il mio tentativo. È possibile utilizzare group_by() e ottenere le combinazioni di id, target e trial. Per ogni combinazione, si vuole ottenere la media per bin0-bin3. Questo è qualcosa che puoi fare con summarise_each() in questo caso.

mydf <- data.frame(id = c(1,1,1,1,1,1,1,1,2,2,2,2), 
        target = c("target", "target", "target", "target", "distractor", 
         "distractor", "distractor", "distractor", 
         "target", "target", "distractor", "distractor"), 
        trial = c("2c", "2c", "2e", "2e", "2c", "2c", "2e", "2e", 
          "2c", "2c", "2e", "2e"), 
        bin0 = c(3,2,0,0,0,0,0,0,1,2,0,0), 
        bin1 = c(0,0,1,0,3,0,0,0,1,0,0,0), 
        bin2 = c(2,3,1,0,0,0,1,0,0,0,0,0), 
        bin3 = c(0,0,2,0,1,0,0,3,1,2,0,0), 
        stringsAsFactors = FALSE) 

library(dplyr)   
group_by(mydf, id, target, trial) %>% 
summarise_each(funs(mean(., na.rm = TRUE)), bin0:bin3) 

# id  target trial bin0 bin1 bin2 bin3 
#1 1 distractor 2c 0.0 1.5 0.0 0.5 
#2 1 distractor 2e 0.0 0.0 0.5 1.5 
#3 1  target 2c 2.5 0.0 2.5 0.0 
#4 1  target 2e 0.0 0.5 0.5 1.0 
#5 2 distractor 2e 0.0 0.0 0.0 0.0 
#6 2  target 2c 1.5 0.5 0.0 1.5 

In alternativa, si può provare il pacchetto data.table di fare la stessa operazione.

foo <- setDT(mydf)[, lapply(.SD, mean), by = list(id, target, trial)] 
print(foo) 

# id  target trial bin0 bin1 bin2 bin3 
#1: 1  target 2c 2.5 0.0 2.5 0.0 
#2: 1  target 2e 0.0 0.5 0.5 1.0 
#3: 1 distractor 2c 0.0 1.5 0.0 0.5 
#4: 1 distractor 2e 0.0 0.0 0.5 1.5 
#5: 2  target 2c 1.5 0.5 0.0 1.5 
#6: 2 distractor 2e 0.0 0.0 0.0 0.0 
Problemi correlati