R语言中按特定值断点统计连续正确响应数的dplyr实现方法
使用dplyr统计连续正确响应次数的实现方法
你原有代码的问题是将ResponseCorrect加入了分组变量,导致所有正确响应被归为同一组,只能计算总数,无法实现遇到错误重置的逻辑。
实现方案
方法1:断点分组法(逻辑清晰易理解)
核心思路是用错误响应作为分组断点,将连续的正确响应归为同一组后累加:
library(tidyverse) result <- df %>% # 按被试、任务阶段、block分组,保证不同独立单元的计数互不干扰 group_by(subject, task_phase, block_number) %>% # 构造断点ID:每遇到一次错误响应(值为-1),ID加1 mutate(run_id = cumsum(ResponseCorrect == -1)) %>% # 加入断点ID作为分组维度 group_by(run_id, .add = TRUE) %>% # 组内计算连续正确次数:错误直接返回0,正确则累加 mutate(ConsecutiveCorrect = ifelse(ResponseCorrect == -1, 0, cumsum(ResponseCorrect))) %>% # 清理辅助列与分组 ungroup() %>% select(-run_id)
方法2:累加器法(代码更简洁)
使用dplyr::accumulate迭代计算,遇到错误直接重置累加值:
result <- df %>% group_by(subject, task_phase, block_number) %>% mutate(ConsecutiveCorrect = accumulate(ResponseCorrect, ~ifelse(.y == -1, 0, .x + .y))) %>% ungroup()
两种方法均可完全匹配你给出的预期输出结果。
内容的提问来源于stack exchange,提问作者spaolizzi
相关产品推荐
相关产品推荐

