R 중급 nchar 자리수 맞추기 실전 예제

    약간 불규칙적인 것을 처리 하기 위해서는 우리는 함수를 만든다.   함수를 만드는 목적은 for  loop문 같이 반복적으로 연산 할때 매우 유리하게 사용 된다.  아래는 네이버 지식인에서 아래와 같이 질문한 내용을 정리 한 것이다. 


데이터 숫자 분류


질문의 내용은 아래와 같다. 

R을 공부하고 있는데, 궁금한점이 있습니다


예를들어 아래와 같은 표가 있을때.  상품코드가 200번이나 201번일때 분류코드는 4자리가 되어야합니다. 따라서 분류코드가 3자리 인경우 앞에 0을 붙여 네자리로 만들고(분류코드가 이미 네자리일 경우는 데이터 변경x), 상품코드가 490이나 491일 경우에는 분류코드가 7자리가 되어야 해서 앞에 7자리가 되게끔 자리수에 맞게 0을 붙여야 합니다.



문제 해결

함수를 2개를 만든다.  200번대 4자리를 만드는 함수,   그리고 상품코드 400번대 7자리수를 만드는 사용자 함수를 만든 다음 아래와 같이 for loop 문으로 정리 하였다. 

 # 라이브러리 불러오기
  library(dplyr)
 상품명 <- c("A", "B", "C", "D", "E")
 상품코드 <- c(200, 201, 200, 490, 491)
 분류코드 <- c(222, 230, 1234, 3974, 12345)
 
 df <- data.frame(상품명, 상품코드, 분류코드)

 df
##   상품명 상품코드 분류코드
## 1      A      200      222
## 2      B      201      230
## 3      C      200     1234
## 4      D      490     3974
## 5      E      491    12345
 # 함수 만들기 상품코드 세자리  100~999 일 경우 가정
   four_digit <- function(x, y) {
       
    z <-  paste0(ifelse(nchar(y) == 3,"0",""), y)
     
    return(z) 
   }
   
   

  #  함수 만들기 400번호 대  7자리수 만들기 
   seven_digit <- function(x, y){

     diff = nchar(y)
     
    z = paste0(
         ifelse(diff == 3, "0000",
         ifelse(diff ==4, "000",
         ifelse(diff == 5, "00",
         ifelse(diff == 6 , "0","00000")))),
         y)
    
    return(z)
   }


# 루프문을 돌려가며 자리수 조정 하기
  for(i in 1:nrow(df)){
    x <- df$상품코드[i]
    y <- df$분류코드[i] 

    if( x >= 100 & x < 400 ){
      df$분류코드[i] <- four_digit(x,y)
      
    } else if(x >= 400 & x < 500){
      df$분류코드[i] <- seven_digit(x,y)
    }
  }
   
df   
##   상품명 상품코드 분류코드
## 1      A      200     0222
## 2      B      201     0230
## 3      C      200     1234
## 4      D      490  0003974
## 5      E      491  0012345

nchar 함수를 이용하여,  글자 수를  계산 하여,   자릿수에 모자르면,  ifelse 함수를 이용해서 비교적 간단하게 작성 한 것이다.

실무에서 이런 취합이 매우 많으니,  앞에와 같은 사용자 함수를 만들어서,    루프문을 돌릴때 재사용 하는 것은 매우 좋다.   


댓글 없음:

댓글 쓰기

css cheat sheet 클래스 선택자, margin(마진), display , center 조정 간단한 구성 요소

 앞에서는 html의 간단한 sheet를 소개 하였습니다.   html은  주로 골격을 나타나는 것이라, 디자인을 하는데는 css로 하여야 합니다.  아래 코드와 같이 css 관련 하여 매우 간단하게 코딩 하겠습니다.  body 부분의 css 코딩  ...