写两个值之间的最大值/最小值

时间:2016-04-12 13:27:11

标签: r

我有一个双列矩阵,我想生成一个新的矩阵/ data.frame,其中如果最大则Col N为1,否则为0(它们永远不相等)。这是我的尝试:

testM <- matrix(c(1,2,3, 1,1,5), ncol = 2, byrow = T)
>testM
    V1  V2
1   1   2
2   3   1
3   1   5

apply(data.frame(testM), 1, function(row) ifelse(max(row[1],row[2]),1,0))

我希望有:

0 1
1 0
0 1

因为max()函数中的0,1参数,但我得到

[1] 1 1 1

有什么想法吗?

3 个答案:

答案 0 :(得分:5)

或使用pmax

testM <- matrix(c(1,2,3, 1,1,5), ncol = 2, byrow = T)

--(testM==pmax(testM[,1],testM[,2]))

     V1 V2
[1,]  0  1
[2,]  1  0
[3,]  0  1

答案 1 :(得分:4)

您可以使用max.colcol生成逻辑矩阵:

res <- col(testM) == max.col(testM)
res
      [,1]  [,2]
[1,] FALSE  TRUE
[2,]  TRUE FALSE
[3,] FALSE  TRUE

如果你想要它为0/1,你可以这样做:

res <- as.integer(col(testM) == max.col(testM)) # this removes the dimension
dim(res) <- dim(testM) # puts the dimension back
res
     [,1] [,2]
[1,]    0    1
[2,]    1    0
[3,]    0    1

答案 2 :(得分:4)

你可以对R中的布尔值进行算术运算!只需检查每行中的元素是否等于它的最大值并乘以1.

t(apply(testM, 1, function(row) 1*(row == max(row))))