使用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
相关产品推荐
相关产品推荐

