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

如何用R统计各参与者各试验的PASS题目数量并生成表格

嗨,作为Stack Overflow新手+R入门用户,这个需求其实很容易实现,我给你两种实用的方法,一种是用tidyverse的工具(逻辑清晰,新手友好),另一种是基础R函数(不用额外装包):

首先,先把你的示例数据构造出来方便测试:

# 构造示例数据框
df <- data.frame(
  Participant = rep(c("P01", "P02", "P03"), each = 6),
  Trial = rep(rep(c("T01", "T02", "T03"), each = 2), 3),
  Question = rep(c("Q01", "Q02"), 9),
  Outcome = c("PASS", "PASS", "FAIL", "FAIL", "FAIL", "PASS",
              "FAIL", "PASS", "PASS", "PASS", "FAIL", "PASS",
              "FAIL", "FAIL", "PASS", "PASS", "PASS", "FAIL")
)

方法1:用tidyverse工具链(dplyr + tidyr)

这个方法逻辑直观,一步步拆解需求:

  1. 先筛选出所有Outcome为PASS的记录
  2. 按Participant和Trial分组,统计每组的PASS数量
  3. 把长格式的数据转换成你需要的宽格式,缺失的组合自动填充0

代码如下:

# 如果没装过tidyverse,先运行 install.packages("tidyverse")
library(dplyr)
library(tidyr)

result <- df %>%
  filter(Outcome == "PASS") %>%  # 只保留通过的题目记录
  count(Participant, Trial) %>%  # 按参与者+试验分组统计PASS数量
  pivot_wider(
    names_from = Trial,  # 把Trial的取值作为列名
    values_from = n,     # 把统计的数量作为单元格值
    values_fill = 0      # 没有PASS的组合填充0,避免出现NA
  )

print(result)

运行后就能得到你想要的表格:

Participant T01 T02 T03
1        P01   2   0   1
2        P02   1   2   1
3        P03   0   2   1

方法2:基础R的xtabs函数

如果你不想安装额外的包,可以用基础R自带的xtabs函数,它可以直接基于条件生成交叉统计表格:

# 直接统计每个(参与者,试验)组合的PASS数量
result_base <- xtabs(~ Participant + Trial, data = df, subset = Outcome == "PASS")
# 转换成数据框格式更符合你的输出需求
result_base <- as.data.frame.matrix(result_base)

print(result_base)

这个方法的核心是subset参数,它只让xtabs统计Outcome == "PASS"的行,所以直接得到了PASS题目的计数,转成data.frame.matrix后就是你要的样式。

补充说明:为什么table函数不行?

你提到的table(df$Participant, df$Trial)只是统计每个(参与者,试验)组合的总记录数(每个试验下有2道题,所以结果都是2),而我们需要的是其中Outcome为PASS的数量,所以必须先过滤条件,或者在统计时指定筛选逻辑,上面的两种方法都解决了这个问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 22:12:46