해당 포스트에서는 R에서 평균 점수를 기반으로 합격 여부를 판단하여 새로운 컬럼에 저장하는 방법을 소개합니다.
1. INTRO
성적 데이터의 경우, 총점을 구하고 평균을 계산하여 합격 여부를 판단하는 루틴의 문제를 많이 볼 수 있습니다. 이전 포스트에서 평균을 구하는 방법을 설명하였다면, 이번 포스트에서는 해당 평균 점수를 기반으로 합격 여부를 판단하는 코드를 tibble()
과 data.frame()
각각의 상황에서 설명드리겠습니다.
2. 문제 풀이
tibble 사용하기
설명에 사용할 성적 데이터는 이전 포스트에서 생성한 데이터로 아래와 같이 만들 수 있습니다.
데이터 생성
library(tidyverse)
mydata <- tibble(
이름 = c("김철수", "김영희", "박영수"),
수학 = c(50, 58, 65),
과학 = c(46, 58, 87),
영어 = c(13, 74, 13)
)
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
패키지에서는 새로운 컬럼을 생성하여 데이터를 저장할 수 있도록 mutate()
함수를 제공하고 있습니다. 자세한 설명은 dplyr 공식 페이지 에서 확인할 수 있으며, 이번 포스트에서는 문제 풀이에 필요한 부분만 다루겠습니다.mutate()
함수는 'mutate(새로운컬럼명 = 계산식)'으로 간단하게 사용할 수 있으며 이번 문제에서는 새로운 컬럼명에 '결과'을 넣고 계산식에 'ifelse(평균 >= 50, "PASS", "FAIL")'를 입력하면 됩니다.ifelse()
함수는 조건문을 다루는 함수로, 'ifelse(조건, 조건 만족시 결과, 조건 불만족시 결과)'의 구조로 사용되며 위 계산식을 살펴보면 '평균이 50이상이면 "PASS" 아니면 "FAIL"을 출력하라'라는 코드로 이해하시면 됩니다. 설명드린 내용을 코드 작성하면 아래와 같습니다.
mydata_add_result <- mydata %>%
mutate(평균 = (수학+과학+영어)/3) %>%
mutate(합격여부 = ifelse(평균 >= 50, "PASS", "FAIL"))
mydata_add_result
# A tibble: 3 x 6 이름 수학 과학 영어 평균 합격여부1 김철수 50 46 13 36.3 FAIL 2 김영희 58 58 74 63.3 PASS 3 박영수 65 87 13 55 PASS
출력 결과를 보면, '합격여부' 컬럼이 생성되었고 ifelse()
문이 정상적으로 적용되어 계산식 결과가 들어간 것을 볼 수 있습니다.
data.frame 사용하기
데이터가 데이터 프레임(Data Frame) 구조로 되어있는 경우, 문법을 약간 수정하면 동일한 계산식으로 해결 가능합니다.
데이터 생성
데이터는 위에서 생성한 mydata_add_ean
를 data.frame()
로 변경하여 사용하겠습니다.
mydata_add_mean_df <- as.data.frame(mydata_add_mean)
mydata_add_mean_df
이름 수학 과학 영어 평균 1 김철수 50 46 13 36.33333 2 김영희 58 58 74 63.33333 3 박영수 65 87 13 55.00000
tibble()
구조의 데이터를 as.data.frame()
함수를 이용해 데이터 프레임 구조로 변경하여 mydata_add_mean_df
변수에 저장하였습니다.
출력 결과를 보면 tibble()
과는 다르게 각 컬럼의 타입이 무엇인지 나타나지 않는 것을 볼 수 있습니다. 이 부분은 사소하지만 필요한 정보를 먼저 제공해 주는 tibble()
이 좀 더 유용하다고 생각됩니다.
새로운 컬럼에 합격여부 저장
위 풀이와 동일하게 '합격여부' 컬럼을 생성해 보겠습니다. 새로운 결과를 저장할 mydata_add_result_df
변수를 만들고 합격여부
컬럼을 생성하면서 계산식이 반영될 수 있도록 코드를 작성해 보겠습니다.
mydata_add_reuslt_df <- mydata_add_mean_df
mydata_add_reuslt_df$합격여부 <- ifelse(mydata_add_reuslt_df$평균 >= 50, "PASS", "FAIL")
mydata_add_reuslt_df
이름 수학 과학 영어 평균 합격여부 1 김철수 50 46 13 36.33333 FAIL 2 김영희 58 58 74 63.33333 PASS 3 박영수 65 87 13 55.00000 PASS
출력 결과를 보면 '합격여부' 컬럼에 계산식이 정상적으로 입력된 것을 볼 수 있습니다.
3. 마무리
이번 포스트에서는 R에서 평균 점수를 기반으로 합격 여부를 판단하여 새로운 컬럼에 저장하는 방법을 설명하였습니다. 결과는 같더라도 과정은 다양할 수 있으며, 자신만의 스타일 또는 주어진 환경을 고려해 문제를 해결하시면 됩니다.
4. 관련링크
[1] tidyverse 공식페이지
[2] dplyr 공식페이지
[3] [R] 새로운 컬럼에 행 평균값 계산하여 넣기