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

使用sapply()统计R语言中测评题正确作答的频率

用R的sapply()统计测评题正确作答频率

嘿,这事儿不难,我帮你一步步捋清楚!首先咱们得先明确手里的两个核心数据:一个是答案密钥(比如命名为answer_key,最好是带题目标签的向量,和你的responses数据框列名对应上),另一个是responses——每行是一个学生,每列是对应题目的作答选项。

第一步:先准备模拟示例(方便你对应自己的数据)

先写个模拟数据的例子,你可以直接替换成自己的真实数据:

# 模拟答案密钥(3道题,正确答案分别是b、a、c,列名和作答数据保持一致)
answer_key <- c(Q1 = "b", Q2 = "a", Q3 = "c")

# 模拟5名学生的作答数据框
responses <- data.frame(
  Q1 = c("b", "a", "b", "c", "b"),
  Q2 = c("a", "a", "b", "a", "c"),
  Q3 = c("c", "c", "a", "c", "b")
)

第二步:用sapply()统计每道题的正确作答次数&频率

sapply()刚好适合遍历responses的每一列(也就是每一道题),我们可以给它传一个自定义函数,用来统计当前题目里学生选对的数量,最后再转换成频率:

# 统计每道题的正确作答人数
correct_counts <- sapply(responses, function(student_answers) {
  # 拿到当前题目的名称,匹配对应的正确答案
  current_question <- names(student_answers)
  correct_answer <- answer_key[current_question]
  # 统计选对的学生数量
  sum(student_answers == correct_answer)
})

# 计算正确作答频率(正确人数/总学生数)
correct_frequencies <- correct_counts / nrow(responses)

# 输出结果
print(correct_frequencies)

运行这段代码后,你会得到每道题的正确作答比例,比如上面的示例输出会是:

Q1   Q2   Q3 
0.80 0.60 0.60 

意思是Q1有80%的学生答对,Q2和Q3都是60%。

小提示

  • 如果你的answer_key和responses的列顺序完全一致,也可以不用匹配列名,但用列名匹配更稳妥,避免因为列顺序乱了导致统计错误。
  • 要是你想统计每个学生的正确题数,只需要把sapply()换成apply()按行遍历就行:student_correct <- apply(responses, 1, function(row) sum(row == answer_key)),这个顺手提一下,说不定你也能用得上!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:15:35