더북(TheBook)

이렇게 변환된 결과는 측정 변수가 variable이라는 컬럼에 값으로 저장되어 variable마다 그룹 지어 통계치를 계산하는 작업이 간단해진다. 예를 들어, 식용유 종류treatment마다 측정 변수의 평균을 구하는 코드는 다음과 같이 작성할 수 있다.4

> library(plyr)
> ddply(m, .(variable), summarise, mean=mean(value, na.rm=TRUE))
  variable      mean
1   potato 6.9525180
2  buttery 1.8236994
3   grassy 0.6641727
4   rancid 3.8522302
5   painty 2.5217579

위 코드에서 na.rm=TRUE는 melt( )된 결과에서 value가 NA 값인 행들이 있어서 필요했다. NA를 포함한 행들을 확인하기 위해 complete.cases( )를 사용해보자. complete.cases( ) 함수는 해당 행의 모든 값이 NA가 아닌 경우 TRUE, 해당 행의 값이 하나라도 NA를 포함하고 있는 경우 FALSE를 반환하므로, 이를 사용해 NA를 포함하는 행을 찾을 수 있다.

> french_fries[!complete.cases(french_fries), ]
    time treatment subject rep potato buttery grassy rancid painty
315    5         3      15   1     NA      NA     NA     NA     NA
455    7         2      79   1    7.3      NA    0.0    0.7      0
515    8         1      79   1   10.5      NA    0.0    0.5      0
520    8         2      16   1    4.5      NA    1.4    6.7      0
563    8         2      79   2    5.7       0    1.4    2.3     NA
...

NA를 포함하는 측정치를 melt( ) 시 제외하려면 na.rm에 TRUE를 지정한다. 다음에 그 예를 보였다.

> m <- melt(id=1:4, french_fries, na.rm=TRUE)
> head(m)
  time treatment subject rep variable value
1    1         1       3   1   potato   2.9
2    1         1       3   2   potato  14.0
3    1         1      10   1   potato  11.0
4    1         1      10   2   potato   9.9
5    1         1      15   1   potato   1.2
6    1         1      15   2   potato   8.8

4 같은 연산을 french_fries에 대해서 한다면 매번 연산 대상이 되는 측정치의 컬럼명이나 컬럼 색인을 기억하고 있어야만 할 것이다. melt( )된 데이터는 측정치 이름을 곧바로 variable 컬럼에서 찾을 수 있어 코드가 간략하다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.