코드 풀이
• 모든 주문 고객의 예약 번호 데이터셋을 생성해서 df_rsv_customer 변수에 담습니다. (A)
• 스테이크 주문 예약 번호 데이터셋을 생성해서 df_steak_order_rsv_no 변수에 담습니다. (B)
• 고객의 모든 예약 번호(A)에 대해 스테이크를 주문한 예약 번호(B)를 레프트 조인합니다. 왼쪽 데이터셋을 기준으로 모두 출력하는 레프트 조인을 했기 때문에 예약 번호(A)에 대해 reserv_no로 조인되지 않으면 steak_order는 ‘NA’로 출력됩니다. 즉, 스테이크를 주문한 주문 예약 번호는 steak_order 항목이 ‘Y’가 되고, 주문하지 않은 주문 예약 번호는 steak_order가 ‘NA’가 됩니다. 이후 steak_order가 NA라면 ifelse()와 is.na() 함수를 사용하여 ‘N’으로 바꿉니다. 우리가 알고자 하는 것은 고객별로 한 번이라도 스테이크를 주문했는지 여부이기에 max() 함수를 사용해서 steak_order에 Y가 있다면 Y만 선택하고, 아니라면 N 하나만 선택합니다. 최종적으로 결과를 종속 변수로 사용하는 df_dpd_var 변수에 담습니다.
그림 9-17 | 고객의 모든 예약 번호(A)에 대해 스테이크 주문한 예약 번호(B)를 레프트 조인