删除R中矩阵中每列的3个最大值

时间:2015-09-25 13:52:36

标签: r matrix

我有一个类似

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

我现在想要删除每列的3个最大值,这样我就会得到一个包含7行的新矩阵 我尝试制作每列的向量,然后用

删除那里的3个最大值
x1 = x[x!=max(x)]
x2 = x1[x1!=max(x1)]
x3 = x2[x2!=max(x2)]

然后将矢量放入一个新矩阵,但由于我的矩阵有时会有很多列,所以我想找到一种更简单的方法。
谢谢你的帮助

1 个答案:

答案 0 :(得分:5)

我们可以使用apply使用MARGIN=2,每列sort遍历列,并使用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])