해당 포스트는 네이버 지식인을 통해 질문받은 "평균보다 큰 몸무게를 갖는 사람 수 세기"에 대한 답변을 공유하는 글입니다.
문제
R프로그래밍 sum함수 질문이요!
다섯 명의 몸무게가 다음과 같이 weight 변수에 저장되어 있다. sum() 함수와 논리 연산을 이용하여 평균보다 큰 몸무게를 갖는 사람이 몇 명인지 구하는 코드를 작성하시오.
> weight <- c(45, 50, 75, 55, 89)
변수를 더하고 5로 나눈다음 카운트하면 될 것 같은데 자꾸 0만 나옵니다 ㅠㅠ
어떻게 코딩하면 되나요?
풀이
이번 문제는 R의 벡터 생성, 논리 비교, 벡터 길이 계산을 이용해야 하는 문제로, 아래와 같이 구분지어 생각해 볼 수 있습니다.
- weight 벡터 생성
- 평균보다 큰 몸무게 찾기
- 조건을 만족하는 벡터 세기
1. weight 벡터 생성
문제에 제시된 weight
벡터는 총 5개의 관측치를 가지고 있습니다. 벡터 생성 함수인 c()
를 이용하여 아래와 같이 생성할 수 있습니다.
weight <- c(45, 50, 75, 55, 89)
weight
[1] 45 50 75 55 89
2. 평균보다 큰 몸무게 찾기
R에서는 평균을 계산해 주는 mean()
함수가 있습니다. 그러나 질문에서 sum()
함수를 이용하라고 명시되어 있기에 평균 계산 공식대로 '총합/n'을 적용하여 계산하였으며, 평균 몸무게보다 큰 몸무게를 가지는(=TRUE
) 벡터는 아래와 같습니다.
weight[weight >= (sum(weight)/5)]
# (=) weight[weight >= mean(weight)]
[1] 75 89
3. 조건을 만족하는 벡터 세기
2번 코드를 통해 평균보다 큰 몸무게들을 찾았으나 문제에서 '몇 명'인지 물었으니 코드를 좀 더 보완해야 합니다. 위 벡터에서 찾은 관측값들이 몇 개인지를 찾아주면 되는데 R에서는 length()
함수로 벡터의 길이를 확인할 수 있습니다.
참고로 nrow()
는 데이터 프레임의 행 개수를 카운트해주는 함수입니다.
length(weight[weight >= (sum(weight)/5)])
# (=) length(weight[weight >= mean(weight)])
[1] 2
4. 최종 코드
위 1~3단계를 통해 평균 몸무게 이상인 사람이 몇 명인지 확인할 수 있었으며, 최종 코드는 아래와 같습니다.
# sum() 사용 버전
weight <- c(45, 50, 75, 55, 89)
weight[weight >= (sum(weight)/5)]
length(weight[weight >= (sum(weight)/5)])
# mean() 사용 버전
weight <- c(45, 50, 75, 55, 89)
weight[weight >= mean(weight)]
length(weight[weight >= mean(weight)])
마무리
이번 포스트에서는 R에서 평균보다 큰 몸무게를 갖는 사람 수 세기에 대해 설명하였습니다. 벡터 논리 연산과 평균 계산으로 간단하게 해결 가능한 문제였지만 벡터 다루기에 익숙하지 않으신 분들에게는 헷갈릴 수 있는 문제였습니다. 벡터 내 논리 연산은 R을 공부하시는 동안 계속 사용하게 될 예정이니 학습때마다 꼼꼼히 알아두시는 것이 좋습니다.
관련 링크
[1] 네이버 지식인