Google AdSense (text)

hidden logo stop

Moving

거지 같은 이글루스 광고노출 정책이 싫어서,
새 보금자리(http://blog.leocat.kr/)로 이사감.

[R] vector에서 조건에 해당하는 index 구하기 Computer & Program

다음과 같은 vector가 있다. 여기서 7 보다 큰 수를 찾으려면??

2, 9, 5, 6, 4, 7, 1, 8, 3, 10


which()를 사용하면 된다. 조건을 만족하는 element의 index가 반환된다. []로 index를 참조하면 해당 값을 꺼낼 수 있다.

> x <- c(2, 9, 5, 6, 4, 7, 1, 10, 3, 8)
> # 7 보다 큰 값의 index
> which(7 < x)
[1] 2 8 10
> # 7 보다 큰 값
> x[which(7 < x)]
[1] 9 10 8


단, array 형태인 경우는 기본적으로 값을 반환하기 때문에, arr.ind를 TRUE값으로 주어야 index를 반환한다. (vector는 기본적으로 index를 주는데, 사실 좀 혼동된다. 오락가락 @ㅅ@)

> m <- matrix(1:12, 3, 4)
> m
[,1] [,2] [,3] [,4]
[1,] 1 4 7 10
[2,] 2 5 8 11
[3,] 3 6 9 12
> # defaul로 조건에 해당하는 값을 반환한다.
> which(m %% 3 == 0)
[1] 3 6 9 12
> # index를 원하는 경우 arr.ind를 TRUE로 주어야 한다.
> which(m %% 3 == 0, arr.ind = TRUE)
row col
[1,] 3 1
[2,] 3 2
[3,] 3 3
[4,] 3 4

> # rowname을 붙여주면..
> rownames(m) <- paste("Case", 1:3, sep = "_")
> m
[,1] [,2] [,3] [,4]
Case_1 1 4 7 10
Case_2 2 5 8 11
Case_3 3 6 9 12
> which(m %% 5 == 0, arr.ind = TRUE)
row col
Case_2 2 2
Case_1 1 4



수정 덧) R Cookbook 12.7. 특정 값의 위치 찾기 (p. 391) 참조

which.min(), which.max()를 이용해서 최대/최소값이 있는 위치의 index를 구할 수 있다. 최대/최소값 자체를 구하려면 min(), max()를 사용하면 된다.

> which.min(x)
[1] 7
> min(x)
[1] 1
> which.max(x)
[1] 10
> max(x)
[1] 10


덧글

댓글 입력 영역

Google AdSense (text/image)