【问题标题】:Removing the 3 biggest values of each column in a matrix in R删除R中矩阵中每列的3个最大值
【发布时间】:2015-09-25 22:00:10
【问题描述】:

我有一个矩阵

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)]

然后将向量放入一个新矩阵中,但由于我的矩阵有时有很多列,我想找到一种更简单的方法。
感谢您的帮助

【问题讨论】:

    标签: r matrix


    【解决方案1】:

    我们可以使用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])
    

    【讨论】:

      猜你喜欢
      • 2014-04-06
      • 2012-05-03
      • 2018-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-11
      • 2013-07-31
      相关资源
      最近更新 更多