代码之家  ›  专栏  ›  技术社区  ›  Filippo Marolla

根据R中的多个条件计算分数

  •  1
  • Filippo Marolla  · 技术社区  · 10 月前

    我正在处理一个数据框,显示几个参与者对问卷的答案。某个问题可能有很多正确答案,数据如下:

    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分。

    因此,我需要在数据帧中添加一个新的变量“score”,即 总和 分配给每个参与者的分数。 类似于-如果“a==1”<-1,否则如果。。。,但我不擅长构建复杂的if/else语句。

    非常感谢。

    1 回复  |  直到 10 月前
        1
  •  1
  •   Rui Barradas    10 月前

    创建一个 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年8月17日 reprex v2.1.0