在多个最大

时间:2016-07-19 11:09:09

标签: r max frequency

我有一个这样的矩阵:

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" 

或类似的东西。重点是具有多个最大值的行的索引。

1 个答案:

答案 0 :(得分:1)

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

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

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

如果我们需要提取具有多个max

的元素
lst[lengths(lst)>1]