在具有多个最大值的矩阵中找到每行的最大频率
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的行的索引
我们可以使用 apply
和 MARGIN=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]
我有一个这样的矩阵:
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的行的索引
我们可以使用 apply
和 MARGIN=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]