2015-02-02 6 views
6

Хотя я знаю, как вычислить среднее значение в R, я не могу понять, как это сделать для разных условий. Другие сообщения, которые я прочитал, были не такими сложными.Вычислить среднее значение для каждого объекта для разных условий

>  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 

Учитывая данные, установленные выше, я хотел бы получить среднее значение каждого бункера (Bin0, Bin1, Bin2) по каждому предмету для каждого TrialType для Target/dictractor отдельно. Например, для предмета 1, я хотел бы, чтобы вычислить среднее значение каждой ячейки, для TrialType2C, в Target состоянии, то среднее значение для каждого бункера для TrialType2E в Target состоянии, то значит для каждого бункера для TrialType2C в Distractor состояние и TrialType2E в Distractor.

+0

Вы посмотрели на 'aggregate()'? – Steven

+1

Для хорошего описания вашего самого первого вопроса с образцом данных +1. :) – jazzurro

+1

'aggregate (. ~ Target.dictractor + TrialType + Subject, data = dat, FUN = mean)' будет делать это для решения 'aggregate'. – thelatemail

ответ

2

Один из способов с dplyr пакета:

ДАТа

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) 

Решение

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

Выход

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

Я попробую это так, спасибо! –

3

Вот моя попытка. Вы можете использовать group_by() и получить комбинации id, target и trial. Для каждой комбинации вы хотите получить среднее значение для bin0-bin3. Это то, что вы можете сделать с summarise_each() в этом случае.

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 

В качестве альтернативы, вы можете попробовать data.table пакет, чтобы сделать ту же операцию.

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 

 Смежные вопросы

  • Нет связанных вопросов^_^