在R语言中基于多条件计算问卷参与者得分的技术求助
计算问卷多选题得分的R实现方法
问题背景
现有一份记录参与者问卷答案的DataFrame,其中某一问题包含a、b、c、d四个选项:a和b为正确选项,c和d为错误选项。得分规则为:每选一个正确选项得1分,每选一个错误选项扣0.5分,需要给DataFrame新增score列计算每位参与者的总分。
原始数据的R代码如下:
a <- c(0, 0, 1, 0, 1) b <- c(0, 1, 1, 1, 0) c <- c(0, 0, 0, 0, 0) d <- c(1, 1, 1, 1, 0) ID <- c("001", "002", "003", "004", "005") df <- data.frame(ID=ID, a=a, b=b, c=c, d=d)
生成的DataFrame如下:
ID a b c d 1 001 0 0 0 1 2 002 0 1 0 1 3 003 1 1 0 1 4 004 0 1 0 1 5 005 1 0 0 0
解决方案
无需复杂的if/else语句,通过简单的列运算即可实现:
方法一:分步计算
# 计算正确选项得分:a和b列求和,选中(值为1)得1分 correct_score <- df$a + df$b # 计算错误选项扣分:c和d列求和后乘以-0.5,选中(值为1)扣0.5分 wrong_score <- (df$c + df$d) * (-0.5) # 合并得到总得分 df$score <- correct_score + wrong_score
方法二:简洁合并写法
可以将所有步骤合并为一行代码:
df$score <- (df$a + df$b) - 0.5*(df$c + df$d)
运行后得到的最终结果:
ID a b c d score 1 001 0 0 0 1 -0.5 2 002 0 1 0 1 0.5 3 003 1 1 0 1 1.5 4 004 0 1 0 1 0.5 5 005 1 0 0 0 1.0
逻辑说明
- 正确选项得分:直接对a、b列求和,未选中的选项值为0,不影响得分;选中的选项值为1,直接累加得分。
- 错误选项扣分:对c、d列求和后乘以-0.5,每选中一个错误选项就扣0.5分,未选中则无扣分。
- 总得分是正确得分与错误扣分的总和,逻辑清晰且无需条件判断。
内容的提问来源于stack exchange,提问作者Filippo Marolla
相关产品推荐
相关产品推荐

