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

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

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

最佳答案

我们可以使用 applyMARGIN=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/

相关文章:

r - 标签不会出现在 R 中的层次聚类图(树状图)中

c++ - 打印关键点描述符矩阵 opencv 的值

java - 编程难题 : how to count number of bacteria that are alive?

r - 在 multicomp 中更改 Dunnett glht 的对照组

r - 为什么当我将向量传递给默认的 S3 方法并实现向量 S3 方法时,该方法会被调用?

c - 打印二维矩阵?

删除输出中的级别属性 - R

c - C 中矩阵的维数

r - 从 github 私有(private)存储库安装包,无需个人访问 token

r - 在绘图中切换跟踪时,没有动态更新轴范围(关闭轴自动缩放)?