본문 바로가기
게임 제작 관련/개발환경(프로그램)

R 포맷 변경법(reshape2 패키지), wide format <-> long format

by 김바보 2022. 12. 1.

Wide format: 데이터 분석에서 사용하는 표준적인 형태
흔히 보던 가로(열)이 세로(행)보다 넓찍한 형태가 특징이다.

Long format: 특정 패키지에서 요구하는 데이터 형태
ggplot2 등 특수한 상황에서 요구된다. 세로로 긴 형태가 특징.

if (!require(reshape2)) { install.packages("reshape2") ; library(reshape2) }

이 포맷변경에 필요한 reshape2 패키지를 깔아주자.

1. melt(): Wide -> Long

melt(원본데이터, 고정칼럼)
melt(data = airquality, id.vars= c("month","day"))
-----------------------------------------------------
   month day variable value
1     5   1    ozone    41
2     5   2    ozone    36
3     5   3    ozone    12

#head(n = 3)적용시킨 것임

airquality라는 R에 있는 데이터를 활용했다.
참고로 원본 airquality는

    ozone | solar.r | wind | temp | month | day
1      41 |   190   |  7.4 |  67  |    5  |   1
2      36 |   118   |  8.0 |  72  |    5  |   2

이런식으로 저장된 153(행) x 6(열)형태의 데이터다.

단순 melt만 사용하면 variable(ozone)과 value(ozone의 값)값만 열에 남아있게 되지만
id.vars를 지정하면 위처럼 month, day등 원래 있던 자료도 고정시킬 수 있다.

variable과 value의 이름 변경은

melt(data = airquality, id.vars= c("month","day")), variable.name = "climate_variable", 
value.name = "climate_value")

이런식으로 컬럼명.name = "바꿀 컬럼명"



2. dcast(): Long -> Wide

바꿨으니 다시 되돌아 갈 수도 있어야 한다.

dcast(원본데이터, 열1 + 열2... ~ variable이름, value.var = ‘value값 명’)
dcast(aql, month + day ~ climate_variable, value.var ="climate_value")
--------------------------------------------------------------------------
   month day ozone solar.r wind temp
1     5   1    41     190  7.4   67
2     5   2    36     118  8.0   72
3     5   3    12     149 12.6   74
4     5   4    18     313 11.5   62
5     5   5    NA      NA 14.3   56
#head(n=5)

-------------------------------------------
## 추가할 수 있는 옵션들 ##
fun.aggregate = mean  #평균내서 새로 만들기
margins = TRUE        #all 추가
na.rm = TRUE

dcast(원본데이터, 열1 + 열2... 에서 id.vars를 더 추가해서 고정시켰다면 그 고정시킨 열까지도 dcast에 추가해줘야 한다.

댓글