如何用R按作答结果类型计算受试者平均RT并生成新dataframe
R语言按受试者分组计算不同作答结果的平均反应时
问题核心原因
你之前的代码存在两个核心问题:
- 没有按受试者标识分组,计算得到的是整个数据集所有正确试次的总平均,而非每个受试者各自的平均
- dplyr管道中使用
practice$RT这类带$的写法会直接调用原始数据集的整列数据,忽略管道内的分组逻辑,无法得到分组统计结果
实现代码
以下示例默认你的数据集中受试者标识列名为subject_id,如果实际列名不同请自行替换。
第一步:加载依赖包
library(tidyverse)
第二步:生成汇总表
你可以先得到一个每行对应一位受试者、同时包含正确和错误作答平均RT的宽表:
rt_summary <- practice %>% # 按受试者ID、作答结果分组 group_by(subject_id, Outcome) %>% # 计算分组平均RT,na.rm=TRUE避免缺失值导致结果为NA summarise(mean_RT = mean(RT, na.rm = TRUE), .groups = "drop") %>% # 转换为宽格式,不同作答结果的平均RT单独成列 pivot_wider( names_from = Outcome, values_from = mean_RT, names_prefix = "mean_" )
运行后rt_summary会包含subject_id、mean_Correct、mean_Incorrect三列。
第三步:拆分生成单独的dataframe
如果需要分别生成仅含正确平均RT、仅含错误平均RT的两个独立dataframe,可在上述结果基础上筛选:
# 仅含正确作答平均RT的dataframe correct_rt_df <- rt_summary %>% select(subject_id, mean_Correct) # 仅含错误作答平均RT的dataframe incorrect_rt_df <- rt_summary %>% select(subject_id, mean_Incorrect)
补充说明
如果需要保留原始数据集的所有试次行,同时给每行添加对应受试者、对应作答结果的组平均RT,可使用如下代码:
practice_with_group_rt <- practice %>% group_by(subject_id, Outcome) %>% mutate(group_mean_RT = mean(RT, na.rm = TRUE)) %>% ungroup()
内容的提问来源于stack exchange,提问作者Emma McKeon
相关产品推荐
相关产品推荐

