矩阵中的最大行数

时间:2014-03-10 17:00:05

标签: r

我有一个包含R中三列的矩阵。矩阵看起来像这样:

A=matrix(c(1,2,3,4,0.5,1,7,1.2,3,4,2,1),nrow=4, ncol=3)

我想创建一个基于A的矩阵,在A的每一行中,该行返回1表示该行中的最高值,否则返回零。所以在上面的具体情况中,我需要一个如下所示的矩阵:

B=matrix(c(0,0,0,1,0,0,1,0,1,1,0,0),nrow=4,ncol=3)

我试图搜索论坛,但找不到合适的答案。

感谢。

2 个答案:

答案 0 :(得分:5)

也许是这样的?

t(apply(A, 1, function(x) as.numeric(x == max(x))))
#      [,1] [,2] [,3]
# [1,]    0    0    1
# [2,]    0    0    1
# [3,]    0    1    0
# [4,]    1    0    0

请注意,如果多个值与行中的最大值匹配,则每行可能有多个“1”。

答案 1 :(得分:5)

下面与Ananda的答案几乎相同,但如果你的A足够大,那么微小的变化可能会对速度产生影响

> A<-matrix(rnorm(1000*1000),nrow=1000)
> system.time(t(apply(A, 1, function(x) as.numeric(x == max(x)))))
   user  system elapsed
  0.117   0.024   0.141
> system.time(1*(A==apply(A,1,max)))
   user  system elapsed
  0.056   0.008   0.065