Reshape2 pacakge (데이터 조작)


해당 페키지는 Handley Wickham에 의해서 2007년에 개발된 것이다.

해당 기능은 아래의 저널에 게재 되었다. 해당저널은 JCR 기준 상위 5%이내의 저널이다.

Reshaping Data with the reshape Package. Journal of Statistical Software



reshape2 package를 이용하는 방법

CRAN에서 제공하는 페키지이다. 좀더 향상된 기능의 자르고 쪼개고 재결합하는 기능을 담고 있다.


우리는 때때로 Wide-format 또는 Long-format을 시시각각 원한다.



Wide-format data

ozone   wind  temp
1 23.62 11.623 65.55
2 29.44 10.267 79.10
3 59.12  8.942 83.90
4 59.96  8.794 83.97



Long-format data

    variable  value
 1     ozone 23.615
 2     ozone 29.444
 3     ozone 59.115
 4     ozone 59.962
 5      wind 11.623
 6      wind 10.267
 7      wind  8.942
 8      wind  8.794
 9      temp 65.548
 10     temp 79.100
 11     temp 83.903
 12     temp 83.968


wide-format의 경우 데이터를 분석 할때 주로 쓰이고

long-format은 그외의 모든 경우에 이용된다.

ggplot2

plyr

modeling functions ( lm(), glm(), gam(), etc)


해당 페키지의 key function은 아래와 같다.


melt: wide-format data를 읽어서 그것을 long-format으로 변경함.

cast: long-format data를 읽어서 그것을 wide-format으로 변경함.



melt 설명

melt은 value와 variable로 구분되서 동작한다.

즉 변수(variable)에 대해서 값(value)를 매칭하는 방식으로 넓게 퍼진 데이터를 길게 변경한다.


melt default의 동작 방식은

numeric data를 포함하는 모든 열들이 변수(variable)이 된다.


원래 프레임의 열이 6개고 모든 열이 numeric data라면 

그리고 행이 135개라면 이것을 default melt으로 변경하면

135 * 6 = 918개의 데이터로 길어 지게 된다.



만약 특정 열에대해서 다른 값들을 정리하고 싶다면, vars = c("x","y") 의 옵션을 사용 한다.

즉, X,Y를 ID 변수로 설정하고 이것의 값들은 변경하지 않는다. 


$원래의 행의 수 \times ( 총 열의수 - ID변수의 수)  = 새로 생성될 행의 수$


> aql <- melt(airquality, id.vars = c("month","day"))


실행결과

> str(airquality)
'data.frame':	153 obs. of  6 variables:
 $ ozone  : int  41 36 12 18 NA 28 23 19 8 NA ...
 $ solar.r: int  190 118 149 313 NA NA 299 99 19 194 ...
 $ wind   : num  7.4 8 12.6 11.5 14.3 14.9 8.6 13.8 20.1 8.6 ...
 $ temp   : int  67 72 74 62 56 66 65 59 61 69 ...
 $ month  : int  5 5 5 5 5 5 5 5 5 5 ...
 $ day    : int  1 2 3 4 5 6 7 8 9 10 ...
> aql <- melt(airquality, id.vars = c("month","day"))
> str(aql)
'data.frame':	612 obs. of  4 variables:
 $ month   : int  5 5 5 5 5 5 5 5 5 5 ...
 $ day     : int  1 2 3 4 5 6 7 8 9 10 ...
 $ variable: Factor w/ 4 levels "ozone","solar.r",..: 1 1 1 1 1 1 1 1 1 1 ...
 $ value   : num  41 36 12 18 NA 28 23 19 8 NA ...


이름변경 방법

aql <- melt(airquality, id.vars = c("month", "day"),
  variable.name = "climate_variable", 
  value.name = "climate_value")
head(aql)




#   month day climate_variable climate_value

# 1     5   1            ozone            41

# 2     5   2            ozone            36

# 3     5   3            ozone            12

# 4     5   4            ozone            18

# 5     5   5            ozone            NA

# 6     5   6            ozone            28



cast 함수의 이해


인간이 이해하기에는 wide-format data가 가장 좋다.

따라서 스크래치 단계에서 많이 사용된다.


cast는 데이터 타입별로 지원한다. 하지만 여기서는 data.frame에 대해서 주로 다루겠다.


aql <- melt(airquality, id.vars = c("month", "day"))

aqw <- dcast(aql, month + day ~ variable)

head(aqw)


#   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

# 6     5   6    28      NA 14.9   66


head(airquality) # original data


#   ozone solar.r wind temp month day

# 1    41     190  7.4   67     5   1

# 2    36     118  8.0   72     5   2

# 3    12     149 12.6   74     5   3

# 4    18     313 11.5   62     5   4

# 5    NA      NA 14.3   56     5   5

# 6    28      NA 14.9   66     5   6



동작 방식을 그림으로 정리하면 아래와 같다.




추가적인 정보는 아래의 명령어로 알 수 있다.

+ Recent posts