2015-09-25 65 views
2

我有這樣卸下每一列的3個最大的值在一個矩陣中的R

mat <- matrix(sample(100,100,replace=TRUE),nr=10) 

矩陣我現在想刪除的每一列的3個最大的值,所以我將不得不用新的矩陣7排。
我試圖讓每列的向量,然後用

x1 = x[x!=max(x)] 
x2 = x1[x1!=max(x1)] 
x3 = x2[x2!=max(x2)] 

取出3個最大的值那裏,然後把向量到一個新的矩陣,但我有時矩陣有很多列,我想找到一個更簡單的方法。
感謝您的幫助

回答

5

我們可以通過列循環使用applyMARGIN=2sort每一列,並與head

apply(mat, 2, FUN=function(x) head(sort(x),-3)) 

去掉三個最高值,或者,如果我們想保持順序,使用rank獲取數字索引,通過與1:3比較獲取邏輯索引,否定(!)和列的子集。

apply(mat, 2, FUN=function(x) x[!rank(-x, ties.method='first') %in% 1:3]) 
+1

非常感謝 – user5376411

相關問題