해당 포스트에서는 R에서 행 평균값을 계산하여 새로운 컬럼에 저장하는 방법을 소개합니다.
1. INTRO
R에는 평균을 계산해 주는 mean()
기본 함수가 있습니다. 벡터 또는 리스트 내의 평균을 계산하는 경우는 mean()
함수로 간단히 해결할 수 있지만, 행 별로 평균을 계산해야 하는 경우는 다른 풀이가 필요합니다.
아래에서는 네이버 지식인에 올라온 질문을 기반으로 tibble()
과 data.frame()
구조에서 행별 평균을 구하는 방법을 설명드리겠습니다.
2. 문제 풀이
tibble 사용하기
데이터 생성
먼저 질문자가 제시한 표를 데이터(mydata
)로 생성해 보겠습니다. 참고로 아래 내용에 dplyr
문법이 언급된 것이 보이니 tibble()
구조로 생성하겠습니다.
library(tidyverse)
mydata <- tibble(
이름 = c("김철수", "김영희", "박영수"),
수학 = c(50, 58, 65),
과학 = c(46, 58, 87),
영어 = c(13, 74, 13)
)
mydata
# A tibble: 3 x 4 이름 수학 과학 영어1 김철수 50 46 13 2 김영희 58 58 74 3 박영수 65 87 13
문제에서 제시한 데이터와 동일한 구조의 데이터가 생성되었습니다. 이제 각 행(이름) 별로 평균을 계산하고 새로운 컬럼을 만들어 저장해 보겠습니다.
새로운 컬럼에 평균값 저장
dplyr
패키지에서는 새로운 컬럼을 생성하여 데이터를 저장할 수 있도록 mutate()
함수를 제공하고 있습니다. 자세한 설명은 dplyr 공식 페이지 에서 확인할 수 있으며, 이번 포스트에서는 문제 풀이에 필요한 부분만 다루겠습니다.mutate()
함수는 'mutate(새로운컬럼명 = 계산식)'으로 간단하게 사용할 수 있으며 이번 문제에서는 새로운 컬럼명에 '평균'을 넣고 계산식에 '(수학+과학+영어)/3'를 입력하면 됩니다. 이 내용을 코드로 보면 아래와 같습니다.
mydata_add_mean <- mydata %>%
mutate(평균 = (수학+과학+영어)/3)
mydata_add_mean
# A tibble: 3 x 5 이름 수학 과학 영어 평균1 김철수 50 46 13 36.3 2 김영희 58 58 74 63.3 3 박영수 65 87 13 55
출력 결과를 보면, 계산식이 정상적으로 계산되어 새로운 컬럼인 평균에 저장된 것을 볼 수 있습니다.
dplyr 패키지를 사용하지 않는다면?
위 풀이는 dplyr
패키지를 사용한 풀이로, 질문자 분이 요청에 맞춰 작성되었습니다. 그러나 초심자 분들은 tidyverse 의 tibble()
자료 구조보다 기본 구조인 data.frame
이 더 익숙하실 거라 생각됩니다.
데이터 생성
데이터는 위에서 생성한 mydata
를 data.frame()
로 변경하여 사용하겠습니다.
mydata2 <- as.data.frame(mydata)
mydata2
이름 수학 과학 영어 1 김철수 50 46 13 2 김영희 58 58 74 3 박영수 65 87 13
tibble()
구조의 데이터를 as.data.frame()
함수를 이용해 데이터 프레임 구조로 변경하여 mydata2
변수에 저장하였습니다.
출력 결과를 보면 tibble()
과는 다르게 각 컬럼의 타입이 무엇인지 나타나지 않는 것을 볼 수 있습니다. 이 부분은 사소하지만 필요한 정보를 먼저 제공해 주는 tibble()
이 좀 더 유용하다고 생각됩니다.
새로운 컬럼에 평균값 저장
위 풀이와 동일하게 '평균' 컬럼을 생성해 보겠습니다.
mydata2$평균 <- rowMeans(mydata2[,c('수학','과학','영어')])
mydata2
# 같은 결과
# mydata2$평균 <- (mydata2$수학 + mydata2$과학 + mydata2$영어)/3
# mydata2
이름 수학 과학 영어 평균 1 김철수 50 46 13 36.33333 2 김영희 58 58 74 63.33333 3 박영수 65 87 13 55.00000
출력 결과를 보면 소수점 표현이 약간 다르지만 같은 결과가 출력된 것을 볼 수 있습니다.
위에서 사용한 rowMeans()
함수는 2차원 배열을 가지는 데이터셋에서 행 평균을 구해주는 함수로, mydata2
에서 '수학, 과학, 영어' 컬럼만 선택한 뒤 rowMeans()
로 행 평균을 계산하여 '평균' 컬럼에 저장하였다고 생각하시면 됩니다.
3. 마무리
이번 포스트에서는 R에서 행평균을 계산하여 새로운 컬럼에 저장하는 방법을 설명하였습니다. 결과는 같더라도 과정은 다양할 수 있으며, 자신만의 스타일 또는 주어진 환경을 고려해 문제를 해결하시면 됩니다.
참고로 R은 한글 친화적인 언어가 아니다보니 한글을 변수명이나 데이터에 사용하는 경우 다양한 에러가 발생할 수 있습니다. 가능하다면 한글 변수명이나 데이터는 영어로 치환하여 작업하시는 것을 추천드립니다.
4. 관련링크
[1] tidyverse 공식페이지
[2] dplyr 공식페이지