이렇게 변환된 결과는 측정 변수가 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 컬럼에서 찾을 수 있어 코드가 간략하다.