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

如何在R中创建测验得分变量 批量计算多题测验正确率得分

R实现批量测验得分计算的最优方案

可以通过定义答案键的方式实现行值匹配计算得分,该方案不受无关变量、题量大小影响,是当前需求的最优解

方案核心思路

  1. 构造命名向量作为答案键:键为题目列名,值为对应题目的正确答案,题量多少都可以直接在该向量中补充,无需修改后续计算逻辑
  2. 通过向量化匹配运算,批量计算每个受试者答对题目数量,再转换为百分比得分
  3. 仅匹配答案键中指定的题目列,数据集内其他无关字段不会干扰计算

代码实现(tidyverse 版,适配大样本、多题量场景,效率最优)

library(tidyverse)

# 示例数据集
example <- tibble(ID = c(1,2,3),
                  age = c(12,12,11),
                  Q1 = c(T,T,T),
                  Q2 = c(F,F,T),
                  Q3 = c(F,T,F))

# 定义答案键,50道题只需补充Q4到Q50的对应正确值即可
answer_key <- c(Q1 = TRUE, Q2 = TRUE, Q3 = FALSE)

# 计算得分
result <- example %>%
  mutate(
    # 仅匹配答案键中的题目列,计算答对总题数
    correct_count = rowSums(across(all_of(names(answer_key))) == answer_key[col(across(all_of(names(answer_key))))]),
    # 转换为保留1位小数的百分比得分
    score = round(correct_count / length(answer_key) * 100, 1)
  ) %>%
  select(-correct_count) # 可选择删除中间计算的答对题数字段

代码实现(base R 版)

# 定义答案键
answer_key <- c(Q1 = TRUE, Q2 = TRUE, Q3 = FALSE)
quiz_cols <- names(answer_key)
# 直接计算得分写入数据集
example$score <- round(
  rowSums(example[, quiz_cols] == answer_key[col(example[, quiz_cols])]) / length(quiz_cols) * 100,
  1
)

输出验证

运行上述代码后得到的结果与预期完全一致:

IDageQ1Q2Q3score
112TRUEFALSEFALSE66.7
212TRUEFALSETRUE33.3
311TRUETRUEFALSE100

方案优势

  • 扩展性强:题量从3道扩展到50道甚至更多时,仅需更新答案键内容,计算逻辑无需修改
  • 抗干扰:仅对答案键指定的题目列做匹配计算,数据集中存在的其他无关变量(如年龄、性别、地区等)不会影响计算结果
  • 效率高:采用向量化运算,而非逐行遍历,哪怕受试者样本量过万、题量上百也能快速完成计算

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 10:06:03