在R中找到矩阵中最常出现的元素

时间:2014-01-22 09:47:44

标签: r

R中是否有任何函数可以找到矩阵中最常出现的元素?我有一个包含图像像素的矩阵。我想找到哪个图像像素最常出现在图像矩阵中。我不想使用for循环因为它需要花时间迭代图像的所有像素。

3 个答案:

答案 0 :(得分:4)

设置一些测试数据。

> (image = matrix(sample(1:10, 100, replace = TRUE), nrow = 10))
      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
 [1,]    4    4    2    7    2    2    3    8    2     5
 [2,]    7    3    2    6    6    5    7    8    1     3
 [3,]    7    5    7    9    4    9    4    8    2     7
 [4,]    5    3    4    2    1    5    9   10    9     5
 [5,]    9   10    7    2    7    4    9    1    1     9
 [6,]    2    3    5    1    2    8    1    5    9     4
 [7,]    5    4   10    5    9   10    1    6    1    10
 [8,]    6    3    9    7    1    1    9    2    1     7
 [9,]    5    9    4    8    9    9    5   10    5     4
[10,]   10    1    4    7    3    2    3    5    4     5

手动完成。

> table(image)
image
 1  2  3  4  5  6  7  8  9 10 
12 12  8 12 15  4 11  5 14  7 

在这里我们可以看到值5最常出现(15次)。要以编程方式获得相同的结果:

> which.max(table(image))
5 
5 

答案 1 :(得分:1)

获取1行代码中的模式(或多数值)

使用set.seed生成相同的随机矩阵

> set.seed(123)
> image = matrix(sample(1:10, 100, replace = TRUE), nrow = 10)
> image
       [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
  [1,]    3   10    9   10    2    1    7    8    3     2
  [2,]    8    5    7   10    5    5    1    7    7     7
  [3,]    5    7    7    7    5    8    4    8    5     4
  [4,]    9    6   10    8    4    2    3    1    8     7
  [5,]   10    2    7    1    2    6    9    5    2     4
  [6,]    1    9    8    5    2    3    5    3    5     2
  [7,]    6    3    6    8    3    2    9    4   10     8
  [8,]    9    1    6    3    5    8    9    7    9     1
  [9,]    6    4    3    4    3    9    8    4    9     5
 [10,]    5   10    2    3    9    4    5    2    2     6)

矩阵的模式值(如果平局,则给出最小的平局值)

> names(which.max(table(image)))
[1] "5"

答案 2 :(得分:0)

我不知道任何直接执行此操作的功能,但您可以使用以下功能:

 sort(table(as.vector(Matrix))