R矩阵获得两个最高值的索引

标签 r matrix

我有一个如下所示的矩阵 (df)。我想获取此矩阵中 2 个最低值的列名和行名。有多个具有最低值的单元格,我想获得具有最低值的所有单元格的索引。我可以从这些索引中随机选择 2 个索引。

在矩阵 df2 的情况下,因为只有 1 个单元格具有最低值,只有 1 个单元格具有第二低值,我应该得到这些单元格的索引(值 = 0 和值 = 1)

执行此操作的有效方法是什么?我试图对矩阵进行排序,但它没有满足我的要求:(

df<-matrix(data=c(3,7,5,0,1,0,0,0,0,8,0,9), ncol=2)
rownames(df)<-c("a","b","c","d","e","f")

 df2<-matrix(data=c(3,7,5,6,1,2,4,3,0,8,2,9), ncol=2)
    rownames(df)<-c("a","b","c","d","e","f")

我试过类似的方法,但效率不高

minPoint<-which(df==min(df),arr.ind=T)

在第一个矩阵的情况下它会帮助我,但在第二个矩阵的情况下它不会返回我所期望的。

我更喜欢一个适用于两个矩阵的代码

最佳答案

仅使用 {base} 并基于您的原始代码:

minPoint<-which(df <= sort(df)[2], arr.ind = T)

不仅仅是获取 min(),使用 sort() 将返回一个排序向量,保留最小值的重复。检查小于或等于第二个元素的所有值应该满足您的要求。在 df 的情况下,前两个元素都是 0,而在 df2 中,它们是 0 和 1。

输出:

> which(df <= sort(df)[2], arr.ind = T)
  row col
d   4   1
f   6   1
a   1   2
b   2   2
c   3   2
e   5   2

> which(df2 <= sort(df2)[2], arr.ind = T)
       row col
[1,]   5   1
[2,]   3   2

根据@Roland 的评论进行编辑:您可以使用partial 排序优化大型矩阵,例如:

minPoint<-which(df <= sort(df, partial = 2)[2], arr.ind = T)

关于R矩阵获得两个最高值的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28414177/

相关文章:

python - 从数组值动态填充 numpy 矩阵?

r - 查找 R 包中使用的 Fortran 文件

r - R 中的 WGCNA 安装问题

r - 根据字符串模式匹配拆分数据框列

r - 使用 for 循环创建互差矩阵

python - 使用 pandas DataFrame 行的组合填充 “count matrix”

arrays - Julia - 将矩阵转换为向量

r - 根据 2 列中的组唯一 ID 创建序列号

c - 从C中的txt文件打印矩阵

java - 如何将 List<int[]> 转换为二维数组?