我正在尝试计算实验中每个受试者的反应时间分数,但仅使用一部分试验,这取决于受试者的表现。
每位受试者对16项进行了测验。然后他们对相同的16个项目进行了测试。对于每个主题,我想得到平均反应时间得分,但仅针对那些他们同时获得测验和测试问题的项目。
我的数据文件如下所示:
subject quizitem1 quizitem2 testitem1 testitem2 RT1 RT2
1 1 0 1 1 5 10
2 0 1 0 1 3 7
理想情况下,我想要另一列代表每个主题的平均反应时间,仅考虑i
和quizitem[i]
下只有1的项目testitem[i]
的RT。要使用上面的示例,列将如下所示:
newDV
5
7
...因为主题1在两个指标上只得到第1项正确,而主题2在两个指标上只得到第2项正确。
我首先制作了三个向量,以帮助以正确的顺序保存相关项目的数据。
quizacclist = c(quizitem1, quizitem2)
testacclist = c(testitem1, testitem2)
RTlist = c(RT1, RT2)
这些新向量中的每一个都很长,将所有主题的RT1
附加到所有主题的RT2
,依此类推。
我尝试使用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
变量的项目添加所有RT;也就是说,测验和测试问题对于该项目是正确的。
此时我的具体问题是:如何指定此qualifiedindex
?正如我所设想的那样,它应该是一份清单清单;宏列表中的每个索引都对应一个主题,每个主题都有一个自己的列表,用于确定哪个项目在1
和quizacclist[i]
下都有testacclist[i]
个。
例如:
Qualifiedindex = ([1,5,9],[2,6],[8,16],etc)
理想情况下,此结构允许numerator
变量仅添加满足精度条件的RT。
如何创建列表中的列表? 或者,有没有更好的方法来实现我的目标? 任何帮助将不胜感激!
提前致谢, 亚当
答案 0 :(得分: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))
答案 1 :(得分:0)
感谢尼克提出的有希望的建议!我已经试过了,但目前卡在处理由mutate功能提示的错误,其中替换的行数与数据不同。出现这种情况的常见原因是什么?
再次感谢, 亚当