我有一个包含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)
我试图搜索论坛,但找不到合适的答案。
感谢。
答案 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