[r] R을 사용하여 최대 값을 포함하는 행 인덱스 찾기

다음 행렬이 주어지면 두 번째 열에서 최대 값을 찾고 싶다고 가정합니다.

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)를 어떻게 반환 할 수 있습니까?



답변

보다 ?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 장을 참조하십시오.


답변