[R] 성적 데이터 합격여부 판단하기 (PASS or FAIL)

해당 포스트에서는 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_eandata.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] 새로운 컬럼에 행 평균값 계산하여 넣기


banner-request-analysis