A 공장에서 사용하는 인쇄 장비의 인쇄물 중 불량이 확인되었다. 보다 상세한 내용을 확인하기 위해 몇 번 카트리지에서 문제가 발생했는지 알기 위해 코드를 작성해보자.
데이터 준비
인쇄물 고유 ID와 작업단위(unit)가 기록된 예시 데이터프레임을 다음과 같이 준비하자.
1 | df = data.frame(id = 1:10, |
문제 상황
A 공장에서 사용하는 인쇄 장비의 인쇄물에는 고유 ID가 적혀있다고 한다. 인쇄물의 품질 유지를 위해서는 인쇄 카트리지 제조사의 권장사항에 근거하여 5작업단위마다 카트리지를 교체해주어야 한다. 그런데 낮에 작업한 인쇄물에 불량을 발견하여 몇 번 카트리지에서 문제가 발생했는지 알아보고자 한다. 각 인쇄작업에 소요된 작업단위를 기반으로 몇 번 카트리지가 몇 번 인쇄물의 인쇄에 사용되었는지 알아보자.
상기 문제 상황은 “데이터프레임의 특정 수치형 column의 누적값을 기준으로 새로운 그룹 정보가 있는 파생변수를 생성하는 방법” 으로 좀 더 일반화 할 수 있다.
풀이
반복문 활용
대충 어떻게 해야할지 개념은 머릿속에 있는데 코드 구현이 힘들다면 그냥 반복문이다.
1 | cart_no = 1 |
카트리지 번호는 cart_no, 작업단위 합계는 unit_sum 객체를 활용하여 연산을 한다. 문제에서 5 작업단위라고 했기 때문에 “unit” 변수의 합이 5가 되는 순간 조치를 취해야 한다. 그리하여 1번 코드에서 sum()
함수를 활용하여 “unit” 변수 값을 순차적으로 더하고 있고 이후 조건문 함수 if()
로 검사하는 방식을 택했다. unit_sum 객체가 5가 되면 2번 코드와 3번 코드에서 볼 수 있듯 카트리지 번호(cart_no)를 +1 하고 작업단위 합계(unit_sum)는 초기화 한다.
기본 함수의 활용
앞의 반복문에서 누적합의 개념이 사용되었는데 누적합은 cumsum()
이라는 기본함수가 있다. 이를 활용해보자.
1 | df[, "unit_csum"] = cumsum(df$unit) |
“unit_csum” 변수에서 “unit” 변수의 누적합을 확인할 수 있다. 이제 5 작업단위마다 카트리지를 교체한다고 했기 때문에 “unit_csum” 변수를 5로 나눠보자.
1 | df[, "unit_csum_div5"] = df$unit_csum / 5 |
“unit_csum_div5” 변수를 “cart” 변수와 같은 값으로 만들고자 한다면 어떻게 해야할까? 어림하기 중 올림을 실시할 수 있는 ceiling()
함수를 사용해보자.
1 | df[, "cart_2"] = ceiling(df$unit_csum_div5) |
“cart_2” 변수를 만들었던 코드를 한 줄로 합치면 다음과 같다.
1 | df[, "cart_3"] = ceiling(cumsum(df$unit) / 5) |
보다 난이도 높은 전처리 예제를 원한다면 다음 포스팅인 R) 전처리 - 그룹핑-02를 참고하도록 하자.