【问题标题】:How does one lookup of max value in matrix?如何在矩阵中查找最大值?
【发布时间】:2013-02-26 16:57:40
【问题描述】:

我有一张如下所示的表格:

       1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
  586  0 0 0 1 0 0 0 1 3  1  0  1  0  0  0  0  0  1  0  2  0  3  0  0  0  4  0  1  2  0
  637  0 0 0 0 0 0 2 3 2  2  0  4  0  0  0  0  1  0  0  2  0  1  1  1  0  0  0  0  0  1
  989  0 0 1 0 0 0 2 1 0  0  0  2  1  0  0  1  2  1  0  3  0  2  0  1  1  0  1  0  1  0
  1081 0 0 0 1 0 0 1 0 1  1  0  0  2  0  0  0  0  0  0  3  0  5  0  0  2  1  0  1  1  1
  2922 0 1 1 1 0 0 0 2 1  0  0  0  2  0  0  0  1  1  0  1  0  3  1  1  2  0  0  1  0  1
  3032 0 1 0 0 0 0 0 3 0  0  1  0  2  1  0  1  0  1  1  0  0  3  1  1  1  1  0  0  1  1

第一行的数字 1 到 30 是我的标签,列是我的项目。我想为每个项目找到计数最多的标签。例如。 586 有 4 个 26,这是该行中的最高数,所以对于 586,我想分配 26。

我可以使用 max(table1[1,])) 获得每一行的最大值,这让我获得了第一行的最大值,但没有得到它对应的标签,但我没有不知道如何进行。感谢所有帮助!

输入:

structure(c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 0L, 
0L, 1L, 0L, 1L, 0L, 1L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 2L, 2L, 1L, 0L, 0L, 1L, 3L, 1L, 
0L, 2L, 3L, 3L, 2L, 0L, 1L, 1L, 0L, 1L, 2L, 0L, 1L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 1L, 1L, 4L, 2L, 0L, 0L, 0L, 0L, 0L, 1L, 2L, 2L, 
2L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 
0L, 0L, 1L, 0L, 1L, 2L, 0L, 1L, 0L, 1L, 0L, 1L, 0L, 1L, 1L, 0L, 
0L, 0L, 0L, 0L, 1L, 2L, 2L, 3L, 3L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 3L, 1L, 2L, 5L, 3L, 3L, 0L, 1L, 0L, 0L, 1L, 1L, 0L, 1L, 1L, 
0L, 1L, 1L, 0L, 0L, 1L, 2L, 2L, 1L, 4L, 0L, 0L, 1L, 0L, 1L, 0L, 
0L, 1L, 0L, 0L, 0L, 1L, 0L, 0L, 1L, 1L, 0L, 2L, 0L, 1L, 1L, 0L, 
1L, 0L, 1L, 0L, 1L, 1L, 1L), .Dim = c(6L, 30L), .Dimnames = structure(list(
    c("586", "637", "989", "1081", "2922", "3032"), c("1", "2", 
    "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", 
    "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", 
    "24", "25", "26", "27", "28", "29", "30")), .Names = c("", 
"")))

【问题讨论】:

  • 您要查找的输出的期望结构是什么?

标签: r matrix


【解决方案1】:

max.col 将为您提供对应于每行最大值的列号向量。

> max.col(df, tie='first')
[1] 26 12 20 22 22 8

您可以使用该向量来获取每一行的列名。

> colnames(df)[max.col(df, tie='first')]
[1] "26" "12" "20" "22" "22" "8"

【讨论】:

  • 有时只需在 R 控制台中输入您想要执行的操作(在本例中为最大)并点击选项卡即可;)
  • 这里也一样。首先我看到max.col... +1
  • 注意不同的行为 w.r.t.打破平局?或者是 paste()ing 中的一些错误?
  • 更重要的是:怎么没有max.row?是的,我知道max.col(t(mymat)),但提供一个而不提供另一个似乎很愚蠢——更不用说max.dim(my_array,along=1) :-)
【解决方案2】:

也许您正在寻找which.max。假设您的矩阵称为“temp”:

> apply(temp, 1, which.max)
 586  637  989 1081 2922 3032 
  26   12   20   22   22    8 

applyMARGIN = 1(第二个参数)将按 row 应用一个函数。

【讨论】:

  • 没错!谢谢,我会在几分钟内接受你的回答,如果可以的话!
  • 领先我 50 秒,我删除了我的答案:D +1 为你!!
  • @Jilber,对不起!只是想在我结束之前获得我的 SO 配额;)
猜你喜欢
  • 1970-01-01
  • 2018-02-12
  • 2014-06-17
  • 2013-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-26
  • 1970-01-01
相关资源
最近更新 更多