【问题标题】:Using ifelse conditional statements使用 ifelse 条件语句
【发布时间】:2020-10-09 13:33:13
【问题描述】:

所以我有一个大型数据集,我想用一个键检查许多列和行。有 20 个问题(列)和 76 行,所以手工完成会很忙。

Q1  Q2  Q3  Q4  Q5  Q6  Q7  Q8  Q9  Q10 Q11 Q12 Q13 Q14 Q15 Q16 Q17 Q18 Q19 Q20
        B   B   C   C   B   B   D   C   A   C   C   A   D   B   B   A   B   D
B   C   C   C   C   C   B   D   B   C   A   C   C   A   C   B   A   C   B   D
B   C   B   A   C   B   B   C   D   C   C   C   C   C   D   B   C   A   B   A
B   C   B   C   C   C   B   D   D   C   C   A   C   A   D   B   D   A   C   D
B   C   C   B   C   C   B   D   C   C   C   A   C   B   C   B   A   B   B   D
C   C   D   C   C   C   B   B   D   C   C   A   C   C   D   B   C   A   B   D
B   C   C   D   C   C   B   B   B   C   A   A   C   A   D   B   A   B   B   D
B   C   B   B   C   C   B   D   C   C   C   C   C   A   D   B   A   A   B   D
B   C   B   B   C   C   B   D   C   C   C   A   C   A   D   B   A   D   B   A
B   C   B   B   C   C   B   B   D   C   C   C   C   A   D   B   B   A   B   D
B   A   B   D   A   C   B   B   D   C   C   C   C   A   D   B   A   B   C   D
B   C   C   C   C   C   B   D   D   C   C   A   C   B   C   B   D   A   B   D
B   C   B   B   C   C   B   D   D   C   C   C   C   C   D   B   B   A   B   A
B   C   B   D   C   C   B   B   B   C   C   A   C   B   D   B   A   C   D   D
B   C   B   B   C   C   B   D   D   C   C   A   C   B   D   B   A   B   B   D
B   C   B   B   C   C   B   B   D   C   C   C   C   B   C   B   D   A   B   D
A   C   C   B   C   C   B   D   D   C   C   C   C   B   D   B   C   A   B   D
B   C   A   B   C   A   B   B   D   C   C   C   B   B   C   D   A   B   B   D
KEY=c('B', 'C', 'B', 'C', 'C', 'C', 'B', 'D', 'D', 'C', 'C', 'C', 'C', 'A', 'D', 'B', 'A', 'A', 'B', 'D');

我想运行一个 if 和 else 语句,也许还有一个 for 循环,将 1 分配给每个具有与键对应的正确字母的列,将 0 分配给与键不正确对应的列。这是我到目前为止所拥有的,但我无法让它正确地通过行和列来分配正确的值。

 for(i in 1:nrow(scores)){
  if(scores[i,6:25] == KEY){
    scores[i,6] <- 1
  }
  else{
    scores[i, length(scores)] <- 0
  }
}

任何帮助将不胜感激!

【问题讨论】:

    标签: r loops for-loop if-statement


    【解决方案1】:

    如果我们转换为矩阵并使用== 检查相等性,这真的很快。我们必须进行转置,因为 R 以列优先顺序处理矩阵:

    scores = t(t(dd) == KEY)
    mode(scores) = "integer"
    scores
    #      Q1 Q2 Q3 Q4 Q5 Q6 Q7 Q8 Q9 Q10 Q11 Q12 Q13 Q14 Q15 Q16 Q17 Q18 Q19 Q20
    #  [1,] NA NA  1  0  1  1  1  0  1   1   0   1   1   1   1   1   0   1   1   1
    #  [2,]  1  1  0  1  1  1  1  1  0   1   0   1   1   1   0   1   1   0   1   1
    #  [3,]  1  1  1  0  1  0  1  0  1   1   1   1   1   0   1   1   0   1   1   0
    #  [4,]  1  1  1  1  1  1  1  1  1   1   1   0   1   1   1   1   0   1   0   1
    #  [5,]  1  1  0  0  1  1  1  1  0   1   1   0   1   0   0   1   1   0   1   1
    #  [6,]  0  1  0  1  1  1  1  0  1   1   1   0   1   0   1   1   0   1   1   1
    #  [7,]  1  1  0  0  1  1  1  0  0   1   0   0   1   1   1   1   1   0   1   1
    #  [8,]  1  1  1  0  1  1  1  1  0   1   1   1   1   1   1   1   1   1   1   1
    #  [9,]  1  1  1  0  1  1  1  1  0   1   1   0   1   1   1   1   1   0   1   0
    # [10,]  1  1  1  0  1  1  1  0  1   1   1   1   1   1   1   1   0   1   1   1
    # ...
    

    结果是一个矩阵,您可能希望在其上运行as.data.frame() 以将其返回到数据框。


    使用这些数据:

    dd = read.table(text = 'Q1  Q2  Q3  Q4  Q5  Q6  Q7  Q8  Q9  Q10 Q11 Q12 Q13 Q14 Q15 Q16 Q17 Q18 Q19 Q20
    NA  NA      B   B   C   C   B   B   D   C   A   C   C   A   D   B   B   A   B   D
    B   C   C   C   C   C   B   D   B   C   A   C   C   A   C   B   A   C   B   D
    B   C   B   A   C   B   B   C   D   C   C   C   C   C   D   B   C   A   B   A
    B   C   B   C   C   C   B   D   D   C   C   A   C   A   D   B   D   A   C   D
    B   C   C   B   C   C   B   D   C   C   C   A   C   B   C   B   A   B   B   D
    C   C   D   C   C   C   B   B   D   C   C   A   C   C   D   B   C   A   B   D
    B   C   C   D   C   C   B   B   B   C   A   A   C   A   D   B   A   B   B   D
    B   C   B   B   C   C   B   D   C   C   C   C   C   A   D   B   A   A   B   D
    B   C   B   B   C   C   B   D   C   C   C   A   C   A   D   B   A   D   B   A
    B   C   B   B   C   C   B   B   D   C   C   C   C   A   D   B   B   A   B   D', header = TRUE)
    
    KEY=c('B', 'C', 'B', 'C', 'C', 'C', 'B', 'D', 'D', 'C', 'C', 'C', 'C', 'A', 'D', 'B', 'A', 'A', 'B', 'D')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-27
      • 2020-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多