티스토리 뷰

반응형

데이터 구조 변경


stack(), unstack() 함수로 데이터의 구조를 변경할 수 있습니다.


1. stack() 함수


stack(data) : 데이터를 그룹별로 쌓기


 stack() 함수를 사용하면 그룹별 연산 수행 용이하고, Join, Group by 연산, 데이터 해석을 위해 사용곤 합니다.

함수를 실행하면, 각 변수는 하나의 컬럼이 됩니다.


> df_t <- data.frame('m'=c(90,89,84), 'f'=c(94,87,87))

> df_t

   m  f

1 90 94

2 89 87

3 84 87

> df_s <- stack(df_t)

> df_s     

  values ind       # 퍼져있는 데이터들을 동일할 컬럼으로 쌓아줍니다. 값들은 values 대로, 키 값은 ind 대로 구분

1     90   m

2     89   m

3     84   m

4     94   f

5     87   f

6     87   f

> library(doBy)

> summaryBy(values ~ ind, df_s)   # 그룹 연산

  ind values.mean

1   m    87.66667

2    f    89.33333

> unstack(df_s)     # 맨 뒤 컬럼의 데이터를 컬럼화

   m  f

1 90 94

2 89 87

3 84 87



2. unstack() 함수


unstack(data, fomula)   # fomula = values ~ ind(여러 컬럼으로 분리할 대상)


 unstack()함수는 중복된 값(ex.연, 월, 일)이 있을 때 사용하면 유용합니다.  

함수를 실행하면, 쌓여져 있는 컬럼을 서로 다른 컬럼으로 분리해줍니다.  

  

> df_melt <- read.csv("melt_ex.csv", stringsAsFactors = F)

> head(df_melt)

   year mon latte americano mocha

1  2000   1   400       482   298

2  2000   2   401       483   299

3  2000   3   402       484   300

...

22 2001  10   421       503   319

23 2001  11   422       504   320

24 2001  12   423       505   321


# 월 별 라떼 판매 수량을 월별 서로 다른 컬럼으로 정리(stack -> unstack)

> unstack(df_melt, latte ~ mon)     # latte의 월 별 판매 수량 

   X1  X2  X3  X4  X5  X6  X7  X8  X9 X10 X11 X12

1 400 401 402 403 404 405 406 407 408 409 410 411

2 412 413 414 415 416 417 418 419 420 421 422 423

> unstack(df_melt, mocha ~ mon)  # mocha의 월 별 판매 수량 

   X1  X2  X3  X4  X5  X6  X7  X8  X9 X10 X11 X12

1 298 299 300 301 302 303 304 305 306 307 308 309

2 310 311 312 313 314 315 316 317 318 319 320 321


반응형
댓글
최근에 올라온 글
최근에 달린 댓글
링크
Total
Today
Yesterday