找到最大值但如果比较值相等则生成NA

时间:2017-09-22 07:46:24

标签: r max

我有一个预测结果矩阵,我想在矩阵的每一行中找到绝对最大概率:

   > head(TestResult)
           c290       c320       c390       c460       c520       c580      c710       c780       c800    c100001
[1,] 0.00000000 0.00000000 0.06666667 0.25000000 0.14285714 0.00000000 0.3333333 0.26666667 0.06666667 0.04545455
[2,] 0.01808511 0.05480869 0.01342282 0.01968504 0.03144654 0.02349336 0.5382199 0.07889344 0.11472081 0.05813953
[3,] 0.00000000 0.00000000 0.00000000 0.33333333 0.25000000 0.00000000 0.2000000 0.33333333 0.50000000 0.28571429
[4,] 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.0000000 0.00000000 0.00000000 0.00000000
[5,] 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.0000000 0.00000000 0.00000000 0.00000000
[6,] 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.0000000 0.00000000 0.00000000 0.00000000
> 

如您所见,在最后三行中没有概率值。到目前为止,我的代码是:

BNpred <- colnames(TestResult)[max.col(TestResult,ties.method = "first")]
BNpred <- substring(BNpred,2)

然后对于具有所有相等值的行,R返回默认类“290”(见下文)。虽然我希望那里有一个NA,所以默认数字不会影响我的预测器的准确性。

> head(BNpred)
[1] "710" "710" "800" "290" "290" "290"

我应该如何更改代码,以便在所有行等于零时将NA指定为最大值?

2 个答案:

答案 0 :(得分:1)

您可以添加以下这一行:

BNpred[rowSums(abs(TestResult)) == 0] <- NA

或者这个

BNpred[!apply(TestResult,1,any)] <- NA

答案 1 :(得分:0)

感谢@Moody_Mudskipper的回答。昨晚我想出了另一个解决方案,所以我在这里写给别人:

for (i in 1:1430){
  if(max(TestResult[i,])==0){

    BNpred[i] = "NA" }}