给定以下矩阵,假设我想在第二列中找到最大值:
mat <- matrix(c(1:3,7:9,4:6), byrow = T, nc = 3) mat [,1] [,2] [,3] [1,] 1 2 3 [2,] 7 8 9 [3,] 4 5 6
我知道max(mat[,2])将返回8。如何返回行索引,在本例中是第2行?
max(mat[,2])
wvt8vs2t1#
参见?which.max
?which.max
> which.max( matrix[,2] ) [1] 2
5hcedyr02#
请参阅?order。您只需要最后一个索引(或第一个,按降序排列),所以这应该可以做到这一点:
?order
order(matrix[,2],decreasing=T)[1]
lrl1mhuk3#
下面的例子如何,其中y是矩阵的名称,你要在整个矩阵中寻找最大值:
row(y)[y==max(y)]
如果要提取行:
y[row(y)[y==max(y)],] # this returns unsorted rows.
要返回已排序的行,请用途:
y[sort(row(y)[y==max(y)]),]
这种方法的优点是你可以根据需要改变里面的条件。另外,使用col(y)和悬挂逗号的位置,你也可以提取列。
col(y)
y[,col(y)[y==max(y)]]
要查找特定列中的最大值所在的行,例如第2列,您可以用途:
seq(along=y[,2])[y[,2]==max(y[,2])]
同样,条件是灵活的,以寻找不同的要求。请参阅Phil Spector的优秀“S和S-Plus简介”第5章以获得更多想法。
fsi0uk1n4#
使用dplyr的另一种方法:
mat <- matrix(c(1:3,7:9,4:6), byrow = T, nc = 3) [,1] [,2] [,3] [1,] 1 2 3 [2,] 7 8 9 [3,] 4 5 6 mat %>% as_tibble() %>% filter( V2 == max(V2) ) # A tibble: 1 x 3 V1 V2 V3 <int> <int> <int> 1 7 8 9
jexiocij5#
有一个函数max.col()。对于每一行,它都会找到哪一列具有最大值:
max.col()
max.col(mat) [1] 3 3 3
要找到每列的最大行,只需转置矩阵:
max.col(t(mat)) [1] 2 2 2
5条答案
按热度按时间wvt8vs2t1#
参见
?which.max
5hcedyr02#
请参阅
?order
。您只需要最后一个索引(或第一个,按降序排列),所以这应该可以做到这一点:lrl1mhuk3#
下面的例子如何,其中y是矩阵的名称,你要在整个矩阵中寻找最大值:
如果要提取行:
要返回已排序的行,请用途:
这种方法的优点是你可以根据需要改变里面的条件。另外,使用
col(y)
和悬挂逗号的位置,你也可以提取列。要查找特定列中的最大值所在的行,例如第2列,您可以用途:
同样,条件是灵活的,以寻找不同的要求。
请参阅Phil Spector的优秀“S和S-Plus简介”第5章以获得更多想法。
fsi0uk1n4#
使用dplyr的另一种方法:
jexiocij5#
有一个函数
max.col()
。对于每一行,它都会找到哪一列具有最大值:要找到每列的最大行,只需转置矩阵: