我正在处理一个数据框,其中显示了几位参与者对问卷调查的回答。某个问题可以有很多正确答案,数据如下:
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)
df
ID a b c d
001 0 0 0 1
002 0 1 0 1
003 1 1 0 1
004 0 1 0 1
005 1 0 0 0
a、b、c、d 是同一问题的不同答案选项。例如,参与者001只勾选了选项d,而参与者002选择了b和d。
假设只有a和b是正确答案,而c和d是错误的。我想计算一个分数,表明每个参与者的知识程度。 对于每个正确答案(a 或 b),参与者必须获得 1 分。对于每个错误答案(c 或 d),参与者将损失 0.5 分。
因此,我需要向数据框中添加一个新变量“分数”,它是分配给每个参与者的分数的sum。 类似 - 如果“a == 1”<- 1, else if ..., but I'm bad at building complex if/else statements.
谢谢你
创建一个
score
函数来计算分数。rowSums
将分别添加正确答案和错误答案。错误答案的总和乘以0.5
。然后将两个结果相加并返回给调用者。全部都在一行中。
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)
score <- function(x, pos = c("a", "b"), neg = c("c", "d")) {
rowSums(x[pos]) - 0.5*rowSums(x[neg])
}
score(df)
#> [1] -0.5 0.5 1.5 0.5 1.0
创建于 2024-08-17,使用 reprex v2.1.0