작성자: admin 작성일시: 2016-09-29 20:37:08 조회수: 404 다운로드: 50
카테고리: R 태그목록:

R tidyr 패키지 소개

데이터프레임에 데이터를 정리하는 방식에는 wide form 방식과 long form 방식이 있다.

wide form 방식은 모든 필드를 데이터프레임의 열로 만드는 방법이다. 일반적으로 사용되는 데이터 정리 방법이다.

In:
head(mtcars)
mpgcyldisphpdratwtqsecvsamgearcarb
Mazda RX421.0 6 160 110 3.90 2.62016.460 1 4 4
Mazda RX4 Wag21.0 6 160 110 3.90 2.87517.020 1 4 4
Datsun 71022.8 4 108 93 3.85 2.32018.611 1 4 1
Hornet 4 Drive21.4 6 258 110 3.08 3.21519.441 0 3 1
Hornet Sportabout18.7 8 360 175 3.15 3.44017.020 0 3 2
Valiant18.1 6 225 105 2.76 3.46020.221 0 3 1

long form 방식은 필드 이름을 표시하는 필드 이름과 필드 값을 표시하는 두 개의 열로만 압축시킨 형태를 말한다.

In:
library(tidyr)
mtcars2 <- mtcars
mtcars2$id <- rownames(mtcars2)
mtcars_long <- gather(mtcars2, field_name, field_value, -id)
mtcars_long
idfield_namefield_value
Mazda RX4 mpg 21.0
Mazda RX4 Wag mpg 21.0
Datsun 710 mpg 22.8
Hornet 4 Drive mpg 21.4
Hornet Sportabout mpg 18.7
Valiant mpg 18.1
Duster 360 mpg 14.3
Merc 240D mpg 24.4
Merc 230 mpg 22.8
Merc 280 mpg 19.2
Merc 280C mpg 17.8
Merc 450SE mpg 16.4
Merc 450SL mpg 17.3
Merc 450SLC mpg 15.2
Cadillac Fleetwood mpg 10.4
Lincoln Continentalmpg 10.4
Chrysler Imperial mpg 14.7
Fiat 128 mpg 32.4
Honda Civic mpg 30.4
Toyota Corolla mpg 33.9
Toyota Corona mpg 21.5
Dodge Challenger mpg 15.5
AMC Javelin mpg 15.2
Camaro Z28 mpg 13.3
Pontiac Firebird mpg 19.2
Fiat X1-9 mpg 27.3
Porsche 914-2 mpg 26.0
Lotus Europa mpg 30.4
Ford Pantera L mpg 15.8
Ferrari Dino mpg 19.7
Datsun 710 carb 1
Hornet 4 Drive carb 1
Hornet Sportabout carb 2
Valiant carb 1
Duster 360 carb 4
Merc 240D carb 2
Merc 230 carb 2
Merc 280 carb 4
Merc 280C carb 4
Merc 450SE carb 3
Merc 450SL carb 3
Merc 450SLC carb 3
Cadillac Fleetwood carb 4
Lincoln Continentalcarb 4
Chrysler Imperial carb 4
Fiat 128 carb 1
Honda Civic carb 2
Toyota Corolla carb 1
Toyota Corona carb 1
Dodge Challenger carb 2
AMC Javelin carb 2
Camaro Z28 carb 4
Pontiac Firebird carb 2
Fiat X1-9 carb 1
Porsche 914-2 carb 2
Lotus Europa carb 2
Ford Pantera L carb 4
Ferrari Dino carb 6
Maserati Bora carb 8
Volvo 142E carb 2

long form 방식은 데이터의 필드가 증가해도 행의 수만 늘어나고 데이터프레임의 실제 열의 수는 고정된다는 장점이 있다. 또한 데이터를 값에 따라 묶는 그룹바이(group by) 연산을 적용하기 쉽기 때문에 그룹바이 연산을 적용하기 전에는 항상 long form으로 변환해야 한다.

tidyr 패키지는 데이터프레임을 long form과 wide form으로 상호 변환시켜주는 기능을 제공한다. 명령어는 다음과 같다.

  • gather: wide form -> long form
  • spread : long form -> wide form

gather 명령은 다음과 같이 사용한다.

gather(wide form 데이터프레임, 필드 이름을 넣을 열의 이름, 필드 값을 넣을 열의 이름, -남겨둘 열, , -남겨둘 열, , -남겨둘 열, ...)

남겨둘 열의 이름에는 - (마이너스) 부호를 붙여야 하고 몇 개가 되는 상관없다. 앞의 예에서는 필드 이름을 넣을 열의 이름을 field_name이라고 정했고, 필드 값을 넣을 열의 이름을 field_value라고 정했다. id 열은 마이너스 기호를 붙어 남겨두었다.

이렇게 만들어진 long form 데이터프레임을 도로 wide form으로 바꾸려면 다음과 같이 spread 명령을 사용한다.

spread(long form 데이터프레임, 필드 이름이 있는 열의 이름, 필드 값이 있는 열의 이름)

In:
spread(mtcars_long, field_name, field_value)
idamcarbcyldispdratgearhpmpgqsecvswt
AMC Javelin 0 2 8 304.0 3.15 3 150 15.2 17.30 0 3.435
Cadillac Fleetwood 0 4 8 472.0 2.93 3 205 10.4 17.98 0 5.250
Camaro Z28 0 4 8 350.0 3.73 3 245 13.3 15.41 0 3.840
Chrysler Imperial 0 4 8 440.0 3.23 3 230 14.7 17.42 0 5.345
Datsun 710 1 1 4 108.0 3.85 4 93 22.8 18.61 1 2.320
Dodge Challenger 0 2 8 318.0 2.76 3 150 15.5 16.87 0 3.520
Duster 360 0 4 8 360.0 3.21 3 245 14.3 15.84 0 3.570
Ferrari Dino 1 6 6 145.0 3.62 5 175 19.7 15.50 0 2.770
Fiat 128 1 1 4 78.7 4.08 4 66 32.4 19.47 1 2.200
Fiat X1-9 1 1 4 79.0 4.08 4 66 27.3 18.90 1 1.935
Ford Pantera L 1 4 8 351.0 4.22 5 264 15.8 14.50 0 3.170
Honda Civic 1 2 4 75.7 4.93 4 52 30.4 18.52 1 1.615
Hornet 4 Drive 0 1 6 258.0 3.08 3 110 21.4 19.44 1 3.215
Hornet Sportabout 0 2 8 360.0 3.15 3 175 18.7 17.02 0 3.440
Lincoln Continental0 4 8 460.0 3.00 3 215 10.4 17.82 0 5.424
Lotus Europa 1 2 4 95.1 3.77 5 113 30.4 16.90 1 1.513
Maserati Bora 1 8 8 301.0 3.54 5 335 15.0 14.60 0 3.570
Mazda RX4 1 4 6 160.0 3.90 4 110 21.0 16.46 0 2.620
Mazda RX4 Wag 1 4 6 160.0 3.90 4 110 21.0 17.02 0 2.875
Merc 230 0 2 4 140.8 3.92 4 95 22.8 22.90 1 3.150
Merc 240D 0 2 4 146.7 3.69 4 62 24.4 20.00 1 3.190
Merc 280 0 4 6 167.6 3.92 4 123 19.2 18.30 1 3.440
Merc 280C 0 4 6 167.6 3.92 4 123 17.8 18.90 1 3.440
Merc 450SE 0 3 8 275.8 3.07 3 180 16.4 17.40 0 4.070
Merc 450SL 0 3 8 275.8 3.07 3 180 17.3 17.60 0 3.730
Merc 450SLC 0 3 8 275.8 3.07 3 180 15.2 18.00 0 3.780
Pontiac Firebird 0 2 8 400.0 3.08 3 175 19.2 17.05 0 3.845
Porsche 914-2 1 2 4 120.3 4.43 5 91 26.0 16.70 0 2.140
Toyota Corolla 1 1 4 71.1 4.22 4 65 33.9 19.90 1 1.835
Toyota Corona 0 1 4 120.1 3.70 3 97 21.5 20.01 1 2.465
Valiant 0 1 6 225.0 2.76 3 105 18.1 20.22 1 3.460
Volvo 142E 1 2 4 121.0 4.11 4 109 21.4 18.60 1 2.780

spread 명령은 그룹바이로 만들어진 데이터프레임을 피봇테이블(pivot table) 형태로 바꿀 때 사용된다.

질문/덧글

아직 질문이나 덧글이 없습니다. 첫번째 글을 남겨주세요!