【问题标题】:find the max frequency per row in a matrix whith multiple max在具有多个最大值的矩阵中找到每行的最大频率
【发布时间】:2016-07-19 11:09:08
【问题描述】:

我有一个这样的矩阵:

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" 

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

【问题讨论】:

    标签: r max frequency


    【解决方案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]
    

    【讨论】:

    • 我觉得你也可以用 table(x) 代替 tabulate(x)
    • @Learner 是的,我可以使用它,但tabulate 更快。
    • 这行得通,但我怎样才能提取我有超过一个最大值的行?我正在处理的数据集有很多行,我无法手动检查
    猜你喜欢
    • 2020-10-11
    • 1970-01-01
    • 2021-11-23
    • 1970-01-01
    • 1970-01-01
    • 2020-05-27
    • 2020-01-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多