在具有多个最大值的矩阵中找到每行的最大频率

find the max frequency per row in a matrix whith multiple max

我有一个这样的矩阵:

mat=matrix(c(1,1,1,2,2,2,3,4,
         4,4,4,4,4,3,5,6,
         3,3,5,5,6,8,0,9,
         1,1,1,1,1,4,5,6),nrow=4,byrow=TRUE)
print(mat)

     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
[1,]    1    1    1    2    2    2    3    4
[2,]    4    4    4    4    4    3    5    6
[3,]    3    3    5    5    6    8    0    9
[4,]    1    1    1    1    1    4    5    6

我想找出矩阵的行数,我们可以在其中找到具有最大频率的对象,尤其是那些具有多个最大值的对象。 在这种情况下,我想获得一个像这样的新向量:

     [,1]
[1,] "1" 
[2,] "3" 

或类似的东西。重点放在max大于1的行的索引

我们可以使用 applyMARGIN=1 来遍历行。使用 tabulate 获取每个唯一元素的频率,检查它是否等于 max 值(==)并使用 which 获取数字索引。如果有关系,这将 return 所有 max 值。

lst <- apply(mat, 1, function(x) {x1 <- tabulate(x)
                 which(x1 == max(x1))
     })

如果每行只有一个 max 值,输出将为 vector 否则我们会得到 list 输出。

如果我们需要提取一个以上的元素max

lst[lengths(lst)>1]