R中的假阳性和假阴性无循环

时间:2020-02-10 18:01:25

标签: r indexing false-positive

我有以下数据框(简化示例)

   y.true yhat
1       U    E
2       E    U
3       U    E
4       E    U
5       E    U
6       U    E
7       E    U
8       E    E
9       U    U
10      E    E

我需要计算假阴性(y.true==U,yhat==E)和假阳性(y.true==E,yhat==U)的数量,其中E = 0,在我的情况下为U = 1。当然,我可以纠正以下类型的for循环:

FP<-0
FN<-0
for (i in 1:dim(df.b)[1]) {
  if (df.b[i,1]=='U' & df.b[i,2]=='E') {
    FN<-FN+1
  }
  else if (df.b[i,1]=='E' & df.b[i,2]=='U') {
    FP<-FP+1
  }
}

但是:有没有更有效的方法使用逻辑索引而不是循环来完成此任务?

1 个答案:

答案 0 :(得分:3)

如果df.b是您的data.frame,则根本不需要使用for循环。

FP <- sum(df.b$y.true == 'U' & df.b$yhat == 'E')
FN <- sum(df.b$y.true == 'E' & df.b$yhat == 'U')