멤버십: R에서 테스팅과 강제 형변환 as.charater, as.factor, as.integer

     DB에서 데이터를 받든 엑셀로 데이터를 받으면,   데이터의 성질을 본다. 데이터 성질 본다음에 나는  as.charater, as.factor, as.integer  등  문자,  숫자,  범주형 데이터로 바꾼다.   나중에 머신러닝을 하던 데이터 취합을 하든,  데이터의 성질을 잘 파악하고, 형 변환을 잘해야,  향후 데이터 관리 상의 혼란이 없다. 


3.4 멤버십: R에서 테스팅과 강제 형변환

멤버십과 강제 형변환은 생소한 개념일 가능 성이 있습니다. 멤버십은 R에서 개체의 클래스와 관련이 있다. 강제 형변환은 개체의 클래스를 변경 합니다.. 예를 들어 논리 변수는 logical 클래스를 갖으며 mode가 logical입니다.

lv<-c(T,F,T)


논리 변수인지 여부는 is.logical 함수를 사용해 멤버십을 확인 합니다.

is.logical(lv)
## [1] TRUE


lv는 요인이 아니므로 수준값이 없습니다.

levels(lv)
## NULL


하지만 다음과 같이 두 수준의 요인으로 강제 형변환이 가능합니다.

(fv<-as.factor(lv))
## [1] TRUE  FALSE TRUE 
## Levels: FALSE TRUE
is.factor(fv)
## [1] TRUE


논리 변수를 숫자로 강제 형변환 할 수 있으며 다음과 같이 TRUE는 1 , FALSE 0으로 변환이 가능 합니다.

(nv<-as.numeric(lv))
## [1] 1 0 1


모형 단순화에서와 같이 수준의 수가 감소된 새로운 요소를 생성 할때, 손쉬운 방법으로 자주 사용 합니다.

표 - 개체(배열, 리스트 등)의 다양한 분류 속성을 테스트(is)하는 함수와 개체의 속성을 특정 형태로 강제 형변환(as)하는 함수 이름을 덮어쓰기 하지 않는 다면 어떠한 작업도 개체의 속성을 변경 하지 않습니다.

유형속성테스트강제형변환
  배열
  is.array  as.array
  문자
  is.character  as.character
  복소수
  is.complex  as.complex
  데이터 프레임
  is.data.frame  as.data.frame
  더블형
  is.double  as.double
  요인
  is.factor  as.factor
  리스트
  is.list  as.list
  논리
  is.logical  as.logical
  행렬
  is.matrix  as.matrix
  수치값
  is.numberic  as.numberic
  원(raw)데이터
  is.raw  as.raw
  시계열
  is.ts  as.ts
  벡터
  is.vector  as.vector


일반적으로 as(개체, 값)는 대상 개체를 특정 클래스로 강제 형변환 하는 방법입니다. 하지만 멤버십 함수는 is.something 구문으로 확인하고 강제 형변환 함수는 as.something 구문으로 값을 변환 합니다.

개체는 유형을 갖고 있으므로 is.type 함수를 사용해 해양 유형을 확인 할 수 있습니다. 예를 들면 수학 함수는 숫자를 기대하고, 텍스트 함수는 문자 입력을 기대 합니다. 일부 개체는 다른 유형으로 강제 형변환 할 수 있습니다. 논리 변수값 TRUE와 FALSE를 숫자 1과 0으로서 해석 할 때, 강제형변환이 발생 합니다. 요인 수준은 숫자로 형변환할 수 있으며, 숫자는 문자로 형변환할 수 있으나, 비수치 문자는 숫자로 형변환 할 수 없습니다.

as.numeric(factor(c("a","b","c")))
## [1] 1 2 3
as.numeric(c("a","b","c"))
## Warning: 강제형변환에 의해 생성된 NA 입니다
## [1] NA NA NA
as.numeric(c("a", "4", "c"))
## Warning: 강제형변환에 의해 생성된 NA 입니다
## [1] NA  4 NA


복수소를 숫자로 형변환 하면 허수 부분은 삭제됩니다. is.complex와 is.numeric는 동시에 TRUE가 될 수 없음에 주의 하여야 합니다.

많은 테스팅은 NOT 연산자 !를 함수에 포함해 잘못된 유형이 제공되는 경우 오류 메세지를 반환 합니다. 예를 들어 기하 평균 함수를 작성 하는 경우 is.numberic를 사용해 입력값이 숫자인지 확인 할 수 있습니다.

함수 !is.numberinc를 이용해 입력값이 숫자인지 확인하기 위한 용도로 기하평균을 계산하는 함수를 작성 하면 다음과 같습니다.

geometric<-function(x){
  if(!is.numeric(x)){
     print("숫자를 입력하세요")
  } else {
  exp(mean(log(x)))
  }
}


다음은 문자 데이터의 기하 평균을 계산 하려고 할때, 발생하는 오류 입니다.

geometric(c("a","b","c"))
## [1] "숫자를 입력하세요"

기하평균 계산이 가능한지 확인하기 위해 입력값 0 또는 음수가 아닌지 확인 하는 기능을 다음과 같이 함수에 반영 합니다.

geometric<-function(x){
  if(!is.numeric(x)){
     print("숫자를 입력하세요")
  } else if(min(x)<=0) {
     print("0보다 큰숫자를 입력하여야 합니다. ")
  } else {  
  exp(mean(log(x)))
  }
}

해당 코드를 테스트 하면 다음과 같습니다.

geometric(c(2,3,0,4))
## [1] "0보다 큰숫자를 입력하여야 합니다. "

입력값에 오류가 없다면 어떠한 메시지 없이 숫자 결과만 있을 것입니다.

geometric(c(10,1000,10,1,1))
## [1] 10

예제 1

포터블 용접기 코드는 4600380001의 구조로 되어 있고, 조직코드는 2100,2200 번 숫자로 되어 있습니다. 포터블 용접기 재물조사 하였을때, 엑셀로 숫자만 입력 하였습니다. 이를 어떻게 바꾸어 주어야 하는지 강제형 변환을 이용하여, 연산 하여 주십시오.

아래와 같이 데이터를 가져옵니다.

library(readxl)
portable_welding <- read_excel("portable_welding.xlsx")

summary(portable_welding)
##    용접기번호         용접기내역           조직코드   
##  Min.   :4.630e+09   Length:6           Min.   :2400  
##  1st Qu.:4.630e+09   Class :character   1st Qu.:3550  
##  Median :4.715e+09   Mode  :character   Median :5000  
##  Mean   :4.715e+09                      Mean   :4850  
##  3rd Qu.:4.800e+09                      3rd Qu.:6075  
##  Max.   :4.800e+09                      Max.   :7200

숫자로 되어 있음을 알수 있습니다. 용접기 번호는 character 변수로 고치고, 조직코드는 factor 변수로 고쳐서 데이를 관리 하는 것이 유리 합니다.

portable_welding$용접기번호 <- as.character(portable_welding$용접기번호)
portable_welding$조직코드 <- as.factor(portable_welding$조직코드)
summary(portable_welding)
##   용접기번호         용접기내역        조직코드
##  Length:6           Length:6           2400:1  
##  Class :character   Class :character   3200:1  
##  Mode  :character   Mode  :character   4600:1  
##                                        5400:1  
##                                        6300:1  
##                                        7200:1

댓글 없음:

댓글 쓰기

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

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