我有一个像这样的矩阵
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)]
然后将向量放入一个新的矩阵中,但由于我的矩阵有时有很多列,我想找到一种更简单的方法。
感谢您的帮助
最佳答案
我们可以使用 apply
和 MARGIN=2
循环遍历列,对每列进行排序
,并使用 删除三个最高值头
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])
关于删除R矩阵中每列的3个最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32783768/