노센스와 함께하는 데이터 분석

데이터과학자, '현장에서 바로 써먹는' 시리즈 저자

(R) 데이터 분석 실습

(R) 데이터 다루기 - reshape2(melt, cast)

노센스 2022. 4. 21. 10:50

데이터를 다루다 보면 간혹 열을 행으로, 행을 열로 바꿔야할 경우가 있습니다. 데이터량이 적다면 단순 반복작업을 할 수 있지만 데이터량이 많다면 매우 곤란합니다.

 

R에서는 이러한 경우 reshape2라는 패키지의 melt()와 cast() 함수를 이용합니다.

 

위의 그림과 같이 melt() 함수는 열을 행으로 녹이는(melt) 기능을 하며 반대로 cast() 함수는 행을 열로 주조(cast)하는 기능을 합니다. 실습을 통해 알아보도록 하겠습니다.

 

먼저 reshape2 패키지를 설치하고 불러온 뒤 airquality 데이터 셋을 a라는 변수에 집어넣도록 하겠습니다.

 

install.packages('reshape2')
library(reshape2)

a<- airquality

 

str() 함수 및 head() 함수를 이용해 a 데이터 셋의 형태를 알아보겠습니다.

 

str(a)
head(a)

6개의 변수(variables)와 153개의 행으로 이뤄진 데이터 프레임 형태의 데이터 셋입니다. head() 함수를 이용해 처음부터 6번째 행까지의 데이터 형태를 보니 일부 데이터의 경우 결측치(NA)도 확인할 수 있습니다.

 

이 데이터 셋을 melt() 함수를 이용해 Month와 Day별로 Ozone부터 Temp까지 4개 열을 행으로 변환시켜 보겠습니다.

metl() 함수는 아래와 같이 사용할 수 있으며 c() 함수는 2개 이상의 열(변수)을 기준으로 입력할 때 사용합니다.

 

melt(id = c("기준열1", "기준열2", "기준열3", ...), 데이터 셋)

 

원하는 형태로 변환되었는지 head() 함수를 이용해 데이터를 확인해보고, 추가적으로 subset() 함수를 이용해 5월 1일자 데이터만 추려서 한 번더 확인해보겠습니다.

 

m <- melt(id=c("Month", "Day"), a)
head(m)
subset(m, Month == 5 & Day == 1)

놀랍게도 기준으로 설정한 Month, Day 열을 기준으로 나머지 열(변수)이 행으로 잘 변환된 것을 확인할 수 있습니다.

 

개인적으로 이 함수를 처음 알게되었을 때 얼마나 놀라웠던지... ㅋ

 

그러면 이렇게 변환된 형태를 다시 원래 형태로 주조(cast)해보겠습니다.

이렇게 행을 열로 변환할 때 cast() 함수를 사용하며 데이터 프레임 형태의 데이터 셋에 적용하기 때문에 dcast() 함수를 이용합니다.

 

dcast(데이터 셋, 기존열1+기존열2+기존열3+... ~ 신규열)

 

c <- dcast(m, Month + Day ~ variable)
head(c)

c 데이터 셋을 확인한 결과 위 그림과 같이 데이터 셋 복원이 잘 이뤄진 것을 확인할 수 있습니다.

 

아래에 실습에 활용한 R 스크립트 파일을 첨부하오니 참고하시기 바랍니다. 감사합니다.

 

03.데이터 다루기 - reshape2.R
0.00MB