더북(TheBook)

해들리 위컴은 R과 관련하여 다수의 유명한 데이터 조작 패키지를 발표하고 있으며, 그의 패키지는 Tidy Data 형태로 저장된 데이터에 잘 작동한다. 이 책에서도 위컴이 제작한 plyr, reshape 등의 패키지를 5장에서 다루고 있으므로 Tidy Data의 저장 형태를 눈여겨보기 바란다.

스프레트시트 형태로 정리된 데이터와 Tidy Data 형태의 데이터 사이의 변환은 stack( ), unstack( )으로 수행할 수 있다.

표 4-32 Tidy Data 형태로의 데이터 변환

stack : 다수의 벡터를 하나의 벡터로 합치면서 관측값이 온 곳을 팩터로 명시한다.

stack(
  x  # 리스트 또는 데이터 프레임
)

반환 값은 데이터 프레임이며, values에는 x가 하나로 합쳐진 값들이 저장된다. ind에는 관측값이 온 곳을 팩터로 명시한다.

unstack : stack( )의 역 연산

unstack(
  x,
  form  # ~ 왼쪽에는 관측값, 오른쪽에는 관측값이 온 곳을 표현하는 팩터를 명시한다.
)

앞서 설명한 약물 실험 결과의 데이터 변환을 R 코드로 살펴보자.

> x <- data.frame(a=c(3, 2, 9),
+                 b=c(5, 3, 2),
+                 c=c(4, 5, 7))
> (x_stacked <- stack(x))
  values ind
1      3   a
2      2   a
3      9   a
4      5   b
5      3   b
6      2   b
7      4   c
8      5   c
9      7   c

다음은 각 약물별 평균 효과를 stack( )을 수행한 데이터에 적용한 예다.

> summaryBy(values ~ ind, x_stacked)
  ind values.mean
1   a    4.666667
2   b    3.333333
3   c    5.333333

unstack( )은 이름에서 짐작할 수 있듯이 stack( )을 통해 변환된 데이터를 원래 상태로 되돌리는 데 사용한다. stacked_x에서 데이터는 values, 각 관찰이 나온 그룹은 ind에 저장되어 있다. 따라서 ‘values ~ ind’ 포뮬러를 사용한다.

> unstack(x_stacked, values ~ ind)
  a b c
1 3 5 4
2 2 3 5
3 9 2 7
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.