세로형, 가로형 변환(gather/spread)
세로형/가로형 변환
- 영어로는 보통 long-form/wide-form으로 불리는 두 형태를 여기서는 세로형/가로형이라고 부르겠다.[g1]
[g1]: 한 수강생의 제안인데 괜찮은 것 같다.
- 가로형(wide-form)은 보통 한 개체에 대한 측정을 여러 번 하는 반복 측정에서 많이 쓰인다.
- 다음은 가로형과 세로형을 변환하는 예제이다.
library(dplyr)
library(tidyr)
mtcars$name = rownames(mtcars); rownames(mtcars) = NULL
mtcars %>% select(name, mpg, cyl, disp) -> mtcars01
head(mtcars01)
## name mpg cyl disp ## 1 Mazda RX4 21.0 6 160 ## 2 Mazda RX4 Wag 21.0 6 160 ## 3 Datsun 710 22.8 4 108 ## 4 Hornet 4 Drive 21.4 6 258 ## 5 Hornet Sportabout 18.7 8 360 ## 6 Valiant 18.1 6 225
mtcars01 %>% gather(key='key', value='value', mpg, cyl, disp) -> mtcarsLong
head(mtcarsLong)
## name key value ## 1 Mazda RX4 mpg 21.0 ## 2 Mazda RX4 Wag mpg 21.0 ## 3 Datsun 710 mpg 22.8 ## 4 Hornet 4 Drive mpg 21.4 ## 5 Hornet Sportabout mpg 18.7 ## 6 Valiant mpg 18.1
mtcarsLong %>% spread(key='key', value='value') -> mtcars02
head(mtcars02)
## name cyl disp mpg ## 1 AMC Javelin 8 304 15.2 ## 2 Cadillac Fleetwood 8 472 10.4 ## 3 Camaro Z28 8 350 13.3 ## 4 Chrysler Imperial 8 440 14.7 ## 5 Datsun 710 4 108 22.8 ## 6 Dodge Challenger 8 318 15.5
all.equal(mtcars01, mtcars02)
## [1] "Names: 3 string mismatches" ## [2] "Component \"name\": 30 string mismatches" ## [3] "Component 2: Mean relative difference: 0.6920205" ## [4] "Component 3: Mean relative difference: 36.28838" ## [5] "Component 4: Mean relative difference: 0.9129228"
all.equal(mtcars01 %>% arrange(name), mtcars02 %>% select(name, mpg, cyl, disp) %>% arrange(name))
## [1] TRUE
gather
는 여러 컬럼을 하나의 컬럼으로 변형한다.gather(key='key', value='value', ...)
을 일종의 어구(Idiom)으로 생각하고,...
부분에 하나의 컬럼으로 모으고(gather) 싶은 컬럼을 적어나가면 된다.key
와value
는 변형된 데이터의 두 컬럼 이름이 된다.
spread
는gather
의 반대 방향으로, 즉 세로형 데이터를 가로형으로 변형하기 위해 사용한다.- 만약
gather(key='key', value='value', ...)
로 만들어진 자료라면 간단하게spread(key='key', value='value')
을 쓰면 된다.
- 만약
가로형/세로형 변환(reshape2::melt/dcast) – 숨은원리 데이터사이언스: R로 하는 데이터 사이언스
[…] 세로형, 가로형 변환(gather/spread) […]