2015-02-02 16 views
6

Ortalama R'yi nasıl hesaplayacağımı bilmeme rağmen, farklı koşullar için nasıl yapılacağını anlayamıyorum. Okuduğum diğer yazılar karmaşık değildi.Farklı koşullar için her konu için ortalamayı hesaplayın

>  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 

ayrı ayrı Target/dictractor için her TrialType için her ders için her bin (Bin0, Bin1, Bin2) ortalamasını almak istiyorum yukarıda belirtilen verileri göz önüne alındığında. Örneğin, konu 1 için ben Distractor içinde TrialType2C için her bir bölüm için, sonra bir Target durumda TrialType2E için her bir bölüm için, bir Target durumda, TrialType2C, sonra ortalamayı her bin ortalamasını hesaplamak demek istiyoruz koşul ve Distractor'da TrialType2E. dplyr paketi ile

+0

'aggregate() '' ye baktınız mı? – Steven

+1

İlk sorunuzun iyi bir açıklaması için örnek verilerle +1. :) – jazzurro

+1

'aggregate (. ~ Target.dictractor + TrialType + Subject, data = dat, FUN = mean)' bir 'aggregate' çözümü için yapardı. – thelatemail

cevap

2

Tek yoludur:

VERİ

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) 

Çözüm

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

Çıktı

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

Bu şekilde deneyeceğim, teşekkürler! –

3

İşte benim girişimim. group_by()'u kullanabilir ve id, target ve trial birleşimlerini alabilirsiniz. Her kombinasyon için, bin0-bin3 için ortalama almak istersiniz. Bu, bu durumda summarise_each() ile yapabileceğiniz bir şeydir.

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 

Alternatif olarak, aynı işlemi yapmaya data.table paketini deneyebilirsiniz.

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 
İlgili konular