<데이터 분석을 위한 분할-적용-병합 전략>[3]에 실린 미국 프로야구 선수 데이터가 저장된 baseball 데이터를 활용한 예를 살펴보자. 다음에 데이터의 일부를 보였다.
> head(baseball)
id year stint team lg g ab r h X2b X3b hr rbi sb cs bb so ibb hbp sh sf gidp
4 ansonca01 1871 1 RC1 25 120 29 39 11 3 0 16 6 2 2 1 NA NA NA NA NA
44 forceda01 1871 1 WS3 32 162 45 45 9 4 0 29 8 0 4 0 NA NA NA NA NA
68 mathebo01 1871 1 FW1 19 89 15 24 3 1 0 10 2 1 2 0 NA NA NA NA NA
99 startjo01 1871 1 NY2 33 161 35 58 5 1 1 34 4 2 3 0 NA NA NA NA NA
102 suttoez01 1871 1 CL1 29 128 35 45 3 7 3 23 3 1 1 0 NA NA NA NA NA
106 whitede01 1871 1 CL1 29 146 40 47 6 5 1 21 2 2 4 1 NA NA NA NA NA
데이터의 각 행에는 선수id가 해당 연도year에 기록한 성적이 들어 있다. 각 컬럼의 자세한 의미는 help(baseball) 명령으로 알아보기 바란다.
다음은 선수 ansonca01의 기록을 살펴본 예다. id에 ansonca01가 저장되어 있고 year 컬럼을 보면 1871, 1872, …, 1876년까지의 성적이 저장되어 있음을 알 수 있다.
> head(subset(baseball, id=="ansonca01"))
id year stint team lg g ab r h X2b X3b hr rbi sb cs bb so ibb hbp sh sf gidp
4 ansonca01 1871 1 RC1 25 120 29 39 11 3 0 16 6 2 2 1 NA NA NA NA NA
121 ansonca01 1872 1 PH1 46 217 60 90 10 7 0 50 6 6 16 3 NA NA NA NA NA
276 ansonca01 1873 1 PH1 52 254 53 101 9 2 0 36 0 2 5 1 NA NA NA NA NA
398 ansonca01 1874 1 PH1 55 259 51 87 8 3 0 37 6 0 4 1 NA NA NA NA NA
525 ansonca01 1875 1 PH1 69 326 84 106 15 3 0 58 11 6 4 2 NA NA NA NA NA
741 ansonca01 1876 1 CHN NL 66 309 63 110 9 7 2 59 NA NA 12 8 NA NA NA NA NA
baseball 데이터에 ddply( )를 사용해 각 선수가 출전한 게임 수(컬럼명 ‘g’)의 평균을 구해보자. 각 선수별로 데이터를 그룹 짓기 위해 .(id)를 사용하고, 분할된 각 그룹마다 g의 평균을 계산하면 선수마다의 평균 게임 수가 된다.
> ddply(baseball, .(id), function(sub) { mean(sub$g) })
id V1
1 aaronha01 143.39130
2 abernte02 40.05882
3 adairje01 77.66667
4 adamsba01 25.36842
5 adamsbo03 85.40000
6 adcocjo01 115.23529
7 agostju01 36.20000
8 aguilri01 38.42105
9 aguirha01 27.93750
10 ainsmed01 63.41176
...