将每行中的最高值返回到1并将其余数字放在第0行中

时间:2017-02-04 21:11:05

标签: r function matrix

我有一个矩阵:

head(Y_hat)
         [,1]      [,2]      [,3]
40  0.8316621 0.7593911 0.7446870
56  0.8429158 0.6935900 0.7660440
85  0.8405038 0.6874243 0.7406380
134 0.7269549 0.7584314 0.7089962
30  0.7358268 0.6745820 0.6879305
131 0.7475585 0.7617574 0.7782455

我想写一个函数将每一行转换为0和1.每行的最高值为1,其他两个值为0.例如,第40行将返回(1 0 0) 。我该怎么做?

1 个答案:

答案 0 :(得分:1)

我们可以将每行的max与来自rowMaxs

matrixStats进行比较
library(matrixStats)
+(m1==rowMaxs(m1))
#    [,1] [,2] [,3]
#40     1    0    0
#56     1    0    0
#85     1    0    0
#134    0    1    0
#30     1    0    0
#131    0    0    1

base R选项是通过行/列索引(max.col)获得每行的最大值,然后比较

+(m1==m1[cbind(1:nrow(m1), max.col(m1))])