본문 바로가기
Programming/R

[ R ] 코딩테스트 예제 날짜별 누적합 구하기

by 코딩하는 금융인 2021. 3. 31.

# R을 활용하여 2개의 데이터 테이블을 병합하고 날짜별 누적합 구하기

*본 문제는 모 기업 코딩테스트 시험에서 나온 문제를 제 방식대로 변형한 문제입니다.


데이터 설명

  • MEMBER_GROUP : 회원들의 마지막 주문일 데이터
    1. member_no : 회원 아이디 번호
    2. group : A/B/C
      • A : 마지막 주문일이 2020.06 회원
      • B : 마지막 주문일이 2020. 06 이전 회원
      • C : 주문 이력이 없는 회원

  • ORDER : 회원들의 마지막 주문일 데이터
    1. order_code : 주문번호
    2. order_time : 주문시간
    3. order_pay : 주문금액
    4. member_no : 회원번호


문제1.

MEMBER_GROUP과 ORDER를 member_no 컬럼을 key로 병합하여 MEMBER_ORDER 객체를 생성하시오.

(단, order_date의 클래스는 Date일 것)

 

#1 나의 풀이

#문제1
MEMBER_ORDER <- left_join(MEMBER_GROUP,ORDER,by='member_no') %>% mutate(order_date = as.Date(order_time))

 

문제2.

MEMBER_ORDER에서 각 그룹(group)의 주문일자별 누적 주문액(cum_pay)과 누적 주문수(cum_order_cnt)를 구하시오.

(단, 주문일자별 누적 주문액이란 각 그룹에 대한 주문일자별 누적 주문금액 총합을 의미함.)

 

#2 나의 풀이

#문제2
MEMBER_ORDER %>% 
  na.omit() %>% 
  arrange(group,order_date) %>% 
  group_by(group,order_date) %>% 
  summarise(sum_order_pay = sum(order_pay),sum_order_cnt = sum(n())) %>% 
  group_by(group) %>% 
  mutate(cum_pay = cumsum(sum_order_pay),cum_order_cnt=cumsum(sum_order_cnt)

 

  1. 테이블 내 NA 값들을 제거 (NA를 합할 수 없기에 따로 NA값 대체보다는 제거)
  2. 그룹의 주문일자별이므로 arrange로 정렬 후 group_by(변수s)로 그룹화
  3. 누적하기에 앞서 먼저 그룹의 주문일자별로 주문금액과 주문수를 나타내는 sum_변수 생성 ( group_by에 따른 변수 생성을 해줘야하므로 summarise(새로운 변수명 = ~) 사용)
  4. 다시 그룹별로 묶어준 뒤( group_by) mutate(새로운 변수명 = cumsum(변수)~) 사용하여 그룹의 주문일자별로 누적합 변수를 만들어주면 끝

*포인트 : 바로 그룹의 주문일자별로 누적합을 구한다면 에러가 나타나므로 먼저 sum을 통해 그룹별 합을 만들어주고 그 다음 누적합 구하기


* 해당 문제는 제가 여러 R 관련 코딩테스트를 치르며 시험과 최대한 비슷하게 만든 문제입니다.

 

저처럼 R을 공부하시는 분들에게 조금의 도움이라도 될까 생각하며 만들었으며 해당 문제의 데이터는 임의의 값임을 명심하시기 바랍니다~

반응형

댓글