R:具有最大值的列和行索引

安妮塔

假设我们有一个看起来如下的矩阵:

-0.3  0.2   0.001  -0.4    0.5 
0.25  0.45  0.2    -0.001  0.02
0.8 - 0.2   0.35   0.1     0.1
0.25 -0.14  -0.1   0.02    0.4

现在,我想找到矩阵中尺寸为2 x 2并具有最大元素(以绝对值表示)的部分。因此,这将是以下索引:

2 1
2 2
3 1 
3 2

因为

0.25 0.4
0.8  -0.2

是矩阵的该部分,在该矩阵中具有所有2 x 2矩阵的最大值。

如何在R中实现呢?

我做了这个小例子,因为我的真实矩阵包含大约4000列和5000行,但是该矩阵中的许多值几乎为零。这很难可视化,因此出于这个原因,我只想将最重要的可视化。

代恩

您可以which用来查找矩阵的最大值的索引。

set.seed(1234)
mat <- matrix(sample(1:20), ncol = 5)
mat
#      [,1] [,2] [,3] [,4] [,5]
# [1,]    3   14    8   20   17
# [2,]   12   10    6   15   16
# [3,]   11    1    7    2   19
# [4,]   18    4    5    9   13

which(mat == max(mat), arr.ind = TRUE)
#      row col
# [1,]   1   4

如果要在每一列(或每一行)中查找最大值,则可以使用:

apply(mat, 2, which.max)
# [1] 4 1 1 1 3

问题澄清后进行编辑

mrow <- nrow(mat); mcol <- ncol(mat)
subs <- list()
for (i in 1:(nrow(mat) - 1)) {
  for (j in 1:(ncol(mat) - 1)) {
    x <- c(i, j, i, j + 1, i + 1, j, i + 1, j + 1)
    subs[[paste0(i, j)]] <- matrix(x, ncol = 2, byrow = TRUE)
  }
}

sums <- sapply(subs, function (x) sum(abs(mat[x]))) 
win <- subs[[which(sums == max(sums))]]
mat[win[1, 1]:(win[1, 1] + 1), win[1, 2]:(win[1, 2] + 1)]
#      [,1] [,2]
# [1,]   20   17
# [2,]   15   16

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

返回所有行具有最大值的列索引(反向一键编码)

SQL-获取具有最大值的列的索引

查找每行具有最大值的列索引

在矩阵中找到最大值的行和列索引

Spark SQL:在具有成对列(AB)和(BA)的行中选择最大值

在具有分组数据的行和列中选择最大值

使用awk,uniq和sort获取列中具有最大值的行

TSQL:获取具有最大值的列的行

选择具有最大值保存不同列的行

如何获得具有列最大值的行?

获取具有列最大值的行

返回具有一列最大值的行

删除具有特定列最大值的行

检索一列具有最大值的行

在geopandas的列中选择具有最大值的行

在r的数据帧的每一列中标识具有最大值的行

在没有(...,)熊猫python的情况下在每个行中获取具有最大值的列的索引

获取具有最大值的行

从Pandas DataFrame获取最大值的行索引和列索引

提取行和列的最大值

在数据框中查找具有相关列名和索引的最大值

熊猫复制数据框仅保留具有相同索引的行的最大值

仅选择具有最大值的行,但具有此信息的列是 SUM()

如何删除具有最小值和最大值的空值的列

如何找到具有最大值的多维数组的索引

如何在Python中从所有行和列数组中查找单个最大值,并显示其行和列索引

如果R中的所有值都是NA,如何选择具有最大值的行

Python数据框按行的最小和最大值,具有NaN值

在pandas数据框中选择具有最小值和最大值的行