2016-07-19 33 views
2

矩陣每行的最大頻率我有這樣一個矩陣:找到蒙山多個最大

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 

我想找出我們可以在其中找到對象矩陣的行數最大頻率,尤其是那些具有多於一個最大頻率的頻率。 在這種情況下,我想obtein一個新的載體是這樣的:

 [,1] 
[1,] "1" 
[2,] "3" 

或類似的東西。重點是具有多個最大值的行的索引。

回答

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] 
+1

我想你也可以使用**表(X)**代替製表(X) – Learner

+2

@Learner是的,我可以使用的元素它,但「製表」更快。 – akrun

+0

這工作,但我怎麼能提取我有多個最大的行? 我正在處理的數據集有很多行,我無法手動檢查 – nicola