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


117

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

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

답변:



27

을 참조하십시오 ?order. 마지막 인덱스 (또는 첫 번째, 내림차순) 만 필요하므로 다음과 같이 트릭을 수행해야합니다.

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

5
+1이 답변을 사용하면 최대 값보다는 상위 몇 개를 쉽게 볼 수 있기 때문에이 답변이 마음에 듭니다. 다른 열에서 거의 최대 값에 가까운 날짜를 찾는 데 유용하다는 것을 알았습니다.
djhocking

7
당신은 전체 열 : 정렬 할 필요가 있기 때문에 그러나,이 which.max보다 느린 것을 명심
bartektartanus

@bartektartanus 그리고 what.max가 최대를 어떻게 계산한다고 가정합니까? : p
Nick Ulle 2014

10
물론 분류하지 않고. 최대 필요 O (n) 찾기, 정렬에는 더 많은 시간이 필요합니다. :)
bartektartanus 2014

계급과 질서가 혼란 스러웠습니다. order각 요소가 가지고 있지만 요소의 값으로 정렬 된 색인을 반환합니다. 목록이 먼저 정렬 된 경우 rank각 요소 가 가질 색인을 반환합니다 . 따라서 order현재 인덱스 값을 반환합니다. 팬더 용어로 "인덱서"로 사용됩니다.
The Red Pea

2

다음은 어떻습니까. 여기서 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 장을 참조하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.