2015-07-10 43 views
0

我试图计算实验中每个主题的反应时间分数,但只使用一组试验,取决于主题的性能。对于循环,列表和条件分析(在R中)

每个科目都参加了16个项目的测验。然后他们对同样的16个项目进行了测试。对于每个科目,我都想得到平均反应时间分数,但仅限于那些他们都有问题和试题正确的项目

我的数据文件看起来是这样的:

subject quizitem1 quizitem2 testitem1 testitem2 RT1 RT2 
1   1   0   1   1   5  10 
2   0   1   0   1   3  7 

理想情况下,我想仅仅考虑的RT下都quizitem[i]testitem[i]用ls项目i时表示每个科目的平均反应时间的另一列。使用上面的例子中,列应该是这样的:

newDV 
5 
7 

...因为受1只得到了第1项正确两个措施,并受2只拿到了第2项关于这两项措施是正确的。

我已经开始制作三个向量,以帮助保持相关项目的数据按正确顺序排列。

quizacclist = c(quizitem1, quizitem2) 
testacclist = c(testitem1, testitem2) 
RTlist = c(RT1, RT2) 

所有这些新的载体是很长,从所有科目的RT2献给所有科目,等等追加RT1秒。

我试过使用for循环来计算这一列,但不能完全弄清楚限制分析符合上述条件的条件是什么条件。

这里是我的尝试:

attach(df) 
i = 0 
j = 0 

for(i in subject) { 
    for(j in 1:16) { 
     denominator[i] = sum(quizacclist[i*j]==1 & testacclist[i*j]==1) 
     qualifiedindex[i] = ?? 
     numerator[i] = sum(RTlist[qualifiedindex]) 
     meanqualifiedRT[i] = numerator[i]/denominator[i] 
     } 
    } 

denominator变量应该计算为其中受试者已经得到双方的测验和考试题正确的项目数。

numerator变量应该加起来为变量denominator贡献的项目的所有RTs;也就是说,对该项目进行了测验并测试了正确的问题。

我现在的具体问题是:如何指定此qualifiedindex?正如我设想的那样,它应该是一个列表清单;宏列表中的每个索引对应于主题,并且每个主题都有他们自己的列表,该列表指出quizacclist[i]testacclist[i]下哪些项目具有1s。

例如:

Qualifiedindex = ([1,5,9],[2,6],[8,16],etc) 

理想的情况下,这种结构将允许numerator变量最多只能加满足精度条件的RT。

如何创建此列表中的列表? 或者,有没有更好的方式来实现我的目标? 任何帮助,将不胜感激!

由于提前, 亚当

回答

0

下面是使用基础R reshape一个解决方案,然后dplyr

quiz_long <- reshape(quiz, direction = "long", 
    varying = -1, sep = "", idvar = "subject", 
    timevar = "question") 
quiz_long %>% 
    filter(quizitem == 1 & testitem == 1) %>% 
    group_by(subject) %>% 
    summarise(mean(RT)) 

注意这将只包括科目谁了至少一个可用的问题。对于这些主题将有NA的替代方案:

quiz_long %>% 
    mutate(RT = replace(RT, quizitem != 1 | testitem != 1, NA)) %>% 
    group_by(subject) %>% 
    summarise(mean_RT = mean(RT, na.rm = TRUE)) 
0

感谢您的有希望的建议尼克!我已经试过了,但目前卡住处理由mutate功能提示的错误,其中替换的行数不同于数据。为什么会出现这种情况的普遍原因?

再次感谢, Adam