prosource

R을 사용하여 최대값이 포함된 행 색인 찾기

probook 2023. 6. 12. 21:33
반응형

R을 사용하여 최대값이 포함된 행 색인 찾기

다음 행렬을 고려하여 열 2에서 최대값을 찾고자 한다고 가정합니다.

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을 반환합니다.행 인덱스를 반환하려면 어떻게 해야 합니까? 이 경우 두 번째 행?

?which.max

> which.max( matrix[,2] )
[1] 2

?order마지막 인덱스(또는 먼저 내림차순)만 있으면 되므로 다음 작업을 수행할 수 있습니다.

order(matrix[,2],decreasing=T)[1]

다음은 어떻습니까? 여기서 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)행잉 쉼표의 위치 및 열을 추출할 수도 있습니다.

y[,col(y)[y==max(y)]]

특정 열에서 최대값에 대한 행만 찾으려면 열 2를 사용할 수 있습니다.

seq(along=y[,2])[y[,2]==max(y[,2])]

다시 한 번, 조건은 다양한 요구사항을 찾기 위해 유연합니다.

추가 아이디어는 Phil Spector의 훌륭한 "S와 S-Plus 소개" 5장을 참조하십시오.

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

기능이 있습니다.max.col()각 행에 대해 최대값이 있는 열을 찾습니다.

max.col(mat)
[1] 3 3 3

대신 각 열의 최대 행을 찾으려면 행렬을 전치하기만 하면 됩니다.

max.col(t(mat))
[1] 2 2 2

언급URL : https://stackoverflow.com/questions/743622/finding-row-index-containing-maximum-value-using-r

반응형