在R中按条件删除实验数据行:RT与错误率计算脚本求助
R语言实验数据清理脚本(匹配指定规则)
先加载并准备实验数据
把你提供的实验数据转换成R可处理的数据框:
# 创建示例数据集 exp_data <- data.frame( trial_no = c(1,2,3,4,5,6,7,8,9,10,11,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40), correct = c(1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,0,1,1,1,0,0,1,1,1,1,1,1,1,0,0,1,1,1,1,1,0,1) )
步骤1:删除第一条试次
直接通过行索引删除第一行:
# 删除第一条试次 data_step1 <- exp_data[-1, ] # 重置行号(可选,方便后续处理) rownames(data_step1) <- NULL
处理用于计算RT的数据集(规则2)
规则要求:删除所有错误试次(correct=0)以及该错误试次的下一条试次
# 找出所有错误试次的行号 error_rows <- which(data_step1$correct == 0) # 要删除的行:错误行 + 错误行的下一行 rows_to_remove_rt <- unique(c(error_rows, error_rows + 1)) # 排除超出数据集行数的索引(比如最后一行是错误试次时,error_rows+1会越界) rows_to_remove_rt <- rows_to_remove_rt[rows_to_remove_rt <= nrow(data_step1)] # 生成用于计算RT的清理后数据集 data_for_rt <- data_step1[-rows_to_remove_rt, ]
处理用于计算错误率的数据集(规则3)
规则要求:
- 删除错误试次的下一条试次
- 连续错误时,仅保留第一个错误试次,其余连续错误排除
# 1. 标记错误试次的下一行 next_error_rows <- which(data_step1$correct == 0) + 1 next_error_rows <- next_error_rows[next_error_rows <= nrow(data_step1)] # 2. 处理连续错误:找出连续错误中除第一个之外的错误行 # 使用rle函数识别连续的correct值序列 rle_correct <- rle(data_step1$correct) # 找出连续0且长度>1的序列的位置 long_error_runs <- which(rle_correct$values == 0 & rle_correct$lengths > 1) # 计算这些连续错误序列中需要删除的行号 extra_error_rows <- c() start_pos <- 1 for (i in seq_along(rle_correct$lengths)) { if (i %in% long_error_runs) { # 该序列中除第一个位置外的所有行都要删除 end_pos <- start_pos + rle_correct$lengths[i] - 1 extra_error_rows <- c(extra_error_rows, (start_pos + 1):end_pos) } start_pos <- start_pos + rle_correct$lengths[i] } # 合并所有要删除的行(去重) rows_to_remove_error <- unique(c(next_error_rows, extra_error_rows)) # 生成用于计算错误率的清理后数据集 data_for_error_rate <- data_step1[-rows_to_remove_error, ]
验证结果
可以通过打印数据集查看清理效果:
# 查看RT用数据集 print(data_for_rt) # 查看错误率用数据集 print(data_for_error_rate)
内容的提问来源于stack exchange,提问作者Tripti Verma
相关产品推荐
相关产品推荐

