我有一个矩阵,在R中包含三列.矩阵看起来像这样:
A=matrix(c(1,2,3,4,0.5,1,7,1.2,3,4,2,1),nrow=4, ncol=3)
Run Code Online (Sandbox Code Playgroud)
我想创建一个基于A的矩阵,在A的每一行中,该行返回1表示该行中的最高值,否则返回0.所以在上面的具体情况中,我需要一个如下所示的矩阵:
B=matrix(c(0,0,0,1,0,0,1,0,1,1,0,0),nrow=4,ncol=3)
Run Code Online (Sandbox Code Playgroud)
我试图搜索论坛,但找不到合适的答案.
谢谢.
也许是这样的?
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
Run Code Online (Sandbox Code Playgroud)
请注意,在多个值与行中的最大值匹配的情况下,每行可能有多个"1".
以下几乎与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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
126 次 |
| 最近记录: |