R|Rstudio

#2 데이터 가공하기(Manipulating)

루아흐뉴마 2018. 5. 22. 01:00
반응형
  • 데이터 확인(Checking) 작업을 통해 이상한 점, 분석하기 어려운 자료 구조 등을 파악한 뒤에는
  • 분석하기 용이하도록 데이터를 가공할 필요가 있다. 이러한 과정에는 데이터의 추가, 삭제, 변형 등이 있다.
  • 이와 같은 과정을 모두 끝낸 후에 비로소 올바른 데이터 분석이 가능해진다.
  • R 관련 함수 전체 보기

transform 함수: 변수 계산을 통한 신규 변수 생성

 
  • career 객체는 지난번 #1 데이터 확인하기 포스팅에서 다룬 진로현황 자료이다.
  • 특별한 사유가 없는 한 앞으로 본 데이터를 가지고 지속적으로 포스팅 할 예정이다.
  • str() 함수를 통해 career의 데이터를 살펴보니
  • 남, 녀 졸업생 각각은 있지만 졸업생 합계 데이터가 없다.
  • 앞으로 자주 쓰일 변수일테니 남, 녀 졸업생 합계 변수를 새로 생성해보자.

 

str(career)
## 'data.frame': 2063 obs. of 13 variables: ## $ region : Factor w/ 250 levels "","강원도 강릉시",..: 141 157 148 158 142 159 141 146 141 141 ... ## $ schoolcode: Factor w/ 2063 levels "S000003488","S000003490",..: 9 14 18 19 20 21 22 23 24 25 ... ## $ schoolname: Factor w/ 1958 levels "가곡고등학교",..: 232 885 233 2 18 27 42 54 58 61 ... ## $ classcode : int 4 4 4 4 4 4 4 4 4 4 ... ## $ state : Factor w/ 3 levels "공립","국립",..: 2 2 2 1 3 3 1 3 1 1 ... ## $ schoolchar: Factor w/ 5 levels "","일반고등학교",..: 5 2 5 2 2 2 2 2 2 2 ... ## $ time : Factor w/ 2 levels "","주간": 2 2 2 2 2 2 2 2 2 2 ... ## $ gradM : int 24 161 34 192 177 543 211 307 599 0 ... ## $ gradF : int 125 154 141 130 124 0 203 158 0 545 ... ## $ advanceM : int 17 91 27 105 115 233 85 179 246 0 ... ## $ advanceF : int 99 114 105 91 88 0 109 113 0 306 ... ## $ employM : int 0 0 0 10 7 0 0 0 0 0 ... ## $ employF : int 0 0 0 6 4 0 0 0 0 0 ...

 

  • 가장 아래에 보이는 바와 같이 gradM과 gradF를 더한 값을 저장한 변수 gradAll을 career 객체에 생성하였다.

 

career <- transform(career, gradAll = gradM + gradF) str(career)
## 'data.frame': 2063 obs. of 14 variables: ## $ region : Factor w/ 250 levels "","강원도 강릉시",..: 141 157 148 158 142 159 141 146 141 141 ... ## $ schoolcode: Factor w/ 2063 levels "S000003488","S000003490",..: 9 14 18 19 20 21 22 23 24 25 ... ## $ schoolname: Factor w/ 1958 levels "가곡고등학교",..: 232 885 233 2 18 27 42 54 58 61 ... ## $ classcode : int 4 4 4 4 4 4 4 4 4 4 ... ## $ state : Factor w/ 3 levels "공립","국립",..: 2 2 2 1 3 3 1 3 1 1 ... ## $ schoolchar: Factor w/ 5 levels "","일반고등학교",..: 5 2 5 2 2 2 2 2 2 2 ... ## $ time : Factor w/ 2 levels "","주간": 2 2 2 2 2 2 2 2 2 2 ... ## $ gradM : int 24 161 34 192 177 543 211 307 599 0 ... ## $ gradF : int 125 154 141 130 124 0 203 158 0 545 ... ## $ advanceM : int 17 91 27 105 115 233 85 179 246 0 ... ## $ advanceF : int 99 114 105 91 88 0 109 113 0 306 ... ## $ employM : int 0 0 0 10 7 0 0 0 0 0 ... ## $ employF : int 0 0 0 6 4 0 0 0 0 0 ... ## $ gradAll : int 149 315 175 322 301 543 414 465 599 545 ...

 

 

names 함수: 변수명 확인 및 변경

 
  • names 함수는 객체의 변수명을 알려준다.
  • 아래와 같이 변수 리스트를 보여주는데, 각 리스트에 번호가 있다.
  • 이 번호를 참조해서 변수 명칭을 바꿀 수 있다.

 

names(career)
## [1] "region" "schoolcode" "schoolname" "classcode" "state" ## [6] "schoolchar" "time" "gradM" "gradF" "advanceM" ## [11] "advanceF" "employM" "employF"


  • 이와 같이 객체의 변수 인덱스(여기서는 숫자 1, 즉 원래 region 변수)를 참조하여 변경할 수 있다.
  • 여기서는 region이라는 변수가 와닿지 않아 address라는 명칭으로 변경하였다.

 

names(career)[1] <- 'address' str(career)   names(career)[which(names(career)=='region')] <- 'address' ##변수가 많아서 인덱스를 구하기 어려울 때는 which 함수를 사용해서 변수의 인덱스를 구할 수 있다.
## 'data.frame': 2063 obs. of 13 variables: ## $ address : Factor w/ 250 levels "","강원도 강릉시",..: 141 157 148 158 142 159 141 146 141 141 ... ## $ schoolcode: Factor w/ 2063 levels "S000003488","S000003490",..: 9 14 18 19 20 21 22 23 24 25 ... ## $ schoolname: Factor w/ 1958 levels "가곡고등학교",..: 232 885 233 2 18 27 42 54 58 61 ... ## (...후략)



데이터 삭제

 
  • 데이터프레임의 일부 행이나 열을 삭제할 때는 하이픈(-)을 사용한다.
  • 여기서는 schoolcode 변수를 사용할 일이 없어 삭제하고 career2 데이터 프레임을 생성했다.
  • 역시 인덱스에 접근하는 방식으로 삭제할 수 있다.
  • 여기서는 schoolcode 변수가 두 번째에 위치하므로 -2를 해주었다.
career2 <- career[, -2] str(career2) 
## 'data.frame': 2063 obs. of 12 variables: ## $ region : Factor w/ 250 levels "","강원도 강릉시",..: 141 157 148 158 142 159 141 146 141 141 ... ## $ schoolname: Factor w/ 1958 levels "가곡고등학교",..: 232 885 233 2 18 27 42 54 58 61 ... ## $ classcode : int 4 4 4 4 4 4 4 4 4 4 ... ## (...후략)



데이터의 형(type) 변환

 

  • 데이터의 형(type)이라 함은, 데이터가 공통적으로 가지고 있는 어떤 속성이라고 할 수 있겠다.
  • 수학을 예로 들자면, {-1, 0, 1} 과 같은 집합의 각 요소는 공통적으로 정수라는 속성을 가지고 있다.
  • 이렇듯 R에서도 각 데이터가 가질 수 있는 속성을 몇가지로 구분하고 있다.
  • 정수(Integer), 숫자(Numeric; 이게 약간 복잡하다), 문자 또는 문자열(Character), 요인(Factor), 논리값(Logical) 등이 있다.
  • 이외에도 실수(Double), 복소수(Complex)와 같은 속성도 있다.
  • 앞서 활용한 데이터 프레임 career의 경우 각 변수들이 정수(Integer)와 요인(Factor)으로만 이루어져 있다.
  • 각 학교의 졸업자수, 진학자수, 취업자수는 당연히 정수로 인식된다.
  • 그렇기 때문에 str 함수로 데이터를 살펴보면 모두 Int(Integer)형으로 되어 있다.
  • career 데이터 프레임은 문자형으로 인식될 수 있는 변수가 있음에도 R이 알아서 모두 요인형으로 인식했다.
  • 만약 형 변환을 하는 경우에는 as.형(변수)와 같이 사용한다.
  • 아래 결과와 같이, 기존에 요인형이었던 region 변수가 문자형(Character)으로 바뀌었다.


career$region <- as.character(career$region) str(career)
## 'data.frame': 2063 obs. of 13 variables: ## $ region : chr "서울특별시 강남구" "서울특별시 성북구" "서울특별시 금천구" "서울특별시 송파구" ... ## $ schoolcode: Factor w/ 2063 levels "S000003488","S000003490",..: 9 14 18 19 20 21 22 23 24 25 ... ## $ schoolname: Factor w/ 1958 levels "가곡고등학교",..: 232 885 233 2 18 27 42 54 58 61 ... ## $ classcode : int 4 4 4 4 4 4 4 4 4 4 ... ## $ state : Factor w/ 3 levels "공립","국립",..: 2 2 2 1 3 3 1 3 1 1 ... ## $ schoolchar: Factor w/ 5 levels "","일반고등학교",..: 5 2 5 2 2 2 2 2 2 2 ... ## $ time : Factor w/ 2 levels "","주간": 2 2 2 2 2 2 2 2 2 2 ... ## $ gradM : int 24 161 34 192 177 543 211 307 599 0 ... ## $ gradF : int 125 154 141 130 124 0 203 158 0 545 ... ## $ advanceM : int 17 91 27 105 115 233 85 179 246 0 ... ## $ advanceF : int 99 114 105 91 88 0 109 113 0 306 ... ## $ employM : int 0 0 0 10 7 0 0 0 0 0 ... ## $ employF : int 0 0 0 6 4 0 0 0 0 0 ...


 Copyright (2018) Ruahneuma. All Rights Reserved.

 

 

 

반응형