我有一个这样的矩阵:
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"
或类似的东西。重点是具有多个最大值的行的索引。
答案 0 :(得分:1)
我们可以使用apply
和MARGIN=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]