You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何统计参与者累计两次正确回答前的错误数、试验次数及耗时?

问题与解决方案

问题描述

我有一个数据集,每行代表参与者的一次正确/错误交互。需要完成两个任务:

  1. 统计每个参与者在记录到两次正确回答之前的错误交互次数
  2. 创建新变量,记录满足「累计两次正确回答」条件时的试验次数,同时新增一列计算该条件前的耗时

数据集代码如下:

id = c(1,1,1,1,1,1,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3)
accuracy = c(0,1,0,0,1,1,1,0,0,0,1,1,1,0,0,0,0,0,1,1,1)
timestamp = c(2405.078,2409.575,2414.239,2419.084,2424.138,2428.510,805.5845,812.2674,817.6420,822.5424,828.0416,832.9703,842.2013,456.9943,463.0222,469.0649,475.2177,480.3976,486.9402,491.5632,497.0068)

df <- data.frame(id, accuracy, timestamp)

期望的试验次数结果示例:

IDtrial_count
15
25
34

解决方案

使用dplyr包按参与者分组处理,逐行计算累计正确次数,定位到第一次达到2次正确的试验,再推导所需指标:

library(dplyr)

result <- df %>%
  group_by(id) %>%
  # 累计每个参与者的正确回答次数
  mutate(cum_correct = cumsum(accuracy),
         # 标记首次达到累计2次正确的行
         is_target = cum_correct == 2 & !duplicated(cum_correct == 2)) %>%
  # 筛选目标行
  filter(is_target) %>%
  # 计算各项指标
  mutate(trial_count = row_number(),
         error_count = trial_count - cum_correct,
         time_elapsed = timestamp - first(timestamp)) %>%
  # 保留需要的列
  select(id, trial_count, error_count, time_elapsed) %>%
  ungroup()

# 输出结果
print(result)

代码说明

  • cum_correct = cumsum(accuracy):按参与者累计每次交互的正确次数
  • is_target = cum_correct == 2 & !duplicated(...):确保只选取第一次累计到2次正确的试验行,排除后续重复满足条件的行
  • trial_count = row_number():分组内的行号即为当前试验的次数
  • error_count = trial_count - cum_correct:总试验数减去累计正确数,得到条件达成前的错误次数
  • time_elapsed = timestamp - first(timestamp):计算从该参与者第一次试验到目标试验的耗时

执行结果

运行代码后会得到包含以下字段的结果:

  • id:参与者ID
  • trial_count:达到两次正确回答时的试验次数
  • error_count:条件达成前的错误交互次数
  • time_elapsed:条件达成前的耗时

内容的提问来源于stack exchange,提问作者caeco

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 05:55:32