2015-02-02 39 views
6

Mặc dù tôi biết cách tính giá trị trung bình trong R, nhưng dường như tôi không hiểu cách thực hiện nó cho các điều kiện khác nhau. Các bài đăng khác mà tôi đã đọc không phức tạp.Tính giá trị trung bình cho từng đối tượng cho các điều kiện khác nhau

>  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 

Với tập dữ liệu trên, chúng tôi muốn có được giá trị trung bình của mỗi bin (Bin0, Bin1, Bin2) cho từng đối tượng cho mỗi TrialType cho Target/dictractor riêng. Ví dụ, đối tượng 1 Tôi muốn để tính toán giá trị trung bình của mỗi bin, cho TrialType2C, trong tình trạng Target, sau đó giá trị trung bình cho mỗi bin cho TrialType2E trong tình trạng Target, sau đó có nghĩa là cho mỗi bin cho TrialType2C trong Distractor điều kiện và TrialType2E trong Distractor.

+0

Bạn đã xem 'aggregate() 'chưa? – Steven

+1

Để có mô tả đúng về câu hỏi đầu tiên của bạn với dữ liệu mẫu +1. :) – jazzurro

+1

'tổng hợp (. ~ Target.dictractor + TrialType + Subject, dữ liệu = dat, FUN = mean)' sẽ làm điều đó cho một giải pháp 'aggregate'. – thelatemail

Trả lời

2

Một cách với gói dplyr là:

liệu

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) 

Giải pháp

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

Output

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

Tôi sẽ thử nó theo cách này cảm ơn bạn! –

3

Đây là nỗ lực của tôi. Bạn có thể sử dụng group_by() và nhận các kết hợp của id, targettrial. Đối với mỗi kết hợp, bạn muốn nhận được trung bình cho bin0-bin3. Đây là điều bạn có thể làm với summarise_each() trong trường hợp này.

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 

Hoặc, bạn có thể thử gói data.table để thực hiện thao tác tương tự.

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 
Các vấn đề liên quan