아래 예시를 실행하면 논리 값들이 나온다.
a = c(-10:20)
a > 0
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE
[15] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
[29] TRUE TRUE TRUE
그렇다면 만약 0보다 큰 값들의 전체 합을 구하려면 어떻게 할까?
sum(a>0) # [1] 20
이렇게 하면 될 것 같다. 그러나 위 예시를 실행하면 '20' 이 나온다. 왜 그럴까?
왜냐하면 앞서 확인했지만 a > 0
의 값이 논리값이기 때문에 0보다 큰 값들은 TRUE 즉 1로 보기 때문에
TRUE의 값이 총 20개 있으니까 sum(a>0)
은 20이 나온다.
그렇다면 실제로 0보다 큰 값들의 합을 구하려면 어떻게 해야할까?
a[a>0] # [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
위 예제를 활용하면 된다. 이는 0보다 큰 값들을 출력하라는 의미이다. 따라서 이제 이 값들을 더해주면 되기 때문에
sum(a[a>0]) # [1] 210
를 하면 간단하게 원하게 얻을 수 있다.
이 함수는 우리가 원하는 값들의 위치를 알 수 있는 함수이다. 앞서 사용했었던 -10부터 20까지의 숫자가 들어있는 a
를 활용해서 which
를 사용해보면 아래와 같다.
which(a>0) # [1] 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
a 에는 -10부터 20까지 있기 때문에 0보다 큰 1이 있는 위치(12)부터 20이 있는 위치(31)까지 출력되는 것을 볼 수 있다. 이를 활용해서 앞서 우리가 구했었던 0보다 큰 값들의 합을 다음과 같이도 표현할 수 있다.
sum(a[which(a>0)]) # [1] 210