2013-08-30 6 views
1

Это мой первый раз на стеке. Я попытался найти ответ, но, похоже, я не могу найти что-то важное. Я надеюсь, что кто-то может помочь.вычислить среднее количество проб для каждого предмета в R

У меня есть dataframe здесь: каждый предмет делает 6 испытаний, есть 105 предметов.

Я хочу найти среднее значение 'skip' для 6 испытаний для каждого subj.

Пожалуйста, кто-нибудь может дать мне подсказку о том, как начать.

>  subj entropy n_gambles trial choice 
1  0 high   2  0 skip 
2  0 high   2  1 skip 
3  0 high   2  2 skip 
4  0 high   2  3 skip 
5  0 high   2  4 skip 
6  0 high   2  5 skip 
7  1 high  32  0 buy 
8  1 high  32  1 buy 
9  1 high  32  2 buy 
10  1 high  32  3 buy 
11  1 high  32  4 buy 
12  1 high  32  5 buy 
+3

Что вы подразумеваете под "mean of skip"? – Roland

+0

Действительно ли вы хотите 6 (что, как оказалось, количество судебных разбирательств по каждому предмету), или вы хотите, чтобы все испытания для данного предмета? –

+0

Привет, Роланд, я имел в виду среднее количество пропусков для 6 испытаний для каждого subj. Например, для subj 0 среднее число «пропусков» для 6 испытаний равно 6/6 = 1. Но есть и другие случаи, когда есть смесь покупок и пропусков. :) – user2707619

ответ

0

Если я должен угадать, то вы собираетесь получить среднее из n_gambles для каждого субъекта, где choice==skip, то это может работать:

# Data 
df<- read.table(text="subj entropy n_gambles trial choice 
0 high 2 0 skip 
0 high 2 1 skip 
0 high 2 2 skip 
0 high 2 3 skip 
0 high 2 4 skip 
0 high 2 5 skip 
1 high 32 0 buy 
1 high 32 1 buy 
1 high 32 2 buy 
1 high 32 3 buy 
1 high 32 4 buy 
1 high 32 5 buy",header=T) 

# Get mean 
aggregate(df[df$choice == "skip","n_gambles"], 
      list(subj=df[df$choice == "skip","subj"]), 
      mean) 

# Output 
# subj x 
# 1 0 2 

EDIT: Как я понимаю, вы хотите частоту skip за subj: Попробуйте это:

# Get counts 
result <- as.data.frame(table(df$subj,df$choice)) 
colnames(result) <- c("subj","choice","Freq") 
# Subset for "skip" and divide by 6 
result <- result[ result$choice == "skip",] 
result$Freq <- result$Freq/6 
+0

Я думаю, что ответ близок, но результатом «х» является количество азартных игр, а не среднее количество пропусков для всех испытаний для каждого subj. Не могли бы вы объяснить эту часть кода? Я не понимаю, что это значит? subj = df [df $ choice == "skip", "subj"]) – user2707619

+0

да, этот код дает правильное количество средних пропусков. Огромное спасибо. – user2707619

+0

@ user2707619 Если это было полезно, подумайте о принятии в качестве ответа и/или о повышении. – zx8754

2

Y ожно использовать ddply из пакета plyr: (Вы упомянули, что будут шесть испытаний, так значит, вычисляются путем деления 6 для числа наблюдений с просто выбором = пропустить для каждого предмета)

library(plyr) 
ddply(df,.(subj),summarise,mymean=(length(which(choice=="skip")))/6) 
    subj mymean 
1 0  1 
2 1  0 

Примечания: ФР ваших данные

+0

Это именно то, что я хотел. Большое спасибо!! – user2707619

+0

Нет проблем. Рад, что это сработало для вас. – Metrics