transform 옵션을 주면 raw data를 유지한 상태로 계산해 준다.
head(ddply(iris,'Species',transform,mean.Length=mean(Sepal.Length)))
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species mean.Length
## 1 5.1 3.5 1.4 0.2 setosa 5.006
## 2 4.9 3.0 1.4 0.2 setosa 5.006
## 3 4.7 3.2 1.3 0.2 setosa 5.006
## 4 4.6 3.1 1.5 0.2 setosa 5.006
## 5 5.0 3.6 1.4 0.2 setosa 5.006
## 6 5.4 3.9 1.7 0.4 setosa 5.006
head(ddply(iris,.(Species),transform,mean.Length=mean(Sepal.Length)))
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species mean.Length
## 1 5.1 3.5 1.4 0.2 setosa 5.006
## 2 4.9 3.0 1.4 0.2 setosa 5.006
## 3 4.7 3.2 1.3 0.2 setosa 5.006
## 4 4.6 3.1 1.5 0.2 setosa 5.006
## 5 5.0 3.6 1.4 0.2 setosa 5.006
## 6 5.4 3.9 1.7 0.4 setosa 5.006
summarise옵션을 사용하면 Species별로 요약해서 보여준다.
ddply(iris,'Species',summarise,mean.Length=mean(Sepal.Length))
## Species mean.Length
## 1 setosa 5.006
## 2 versicolor 5.936
## 3 virginica 6.588
ddply(iris,.(Species),summarise,mean.Length=mean(Sepal.Length))
## Species mean.Length
## 1 setosa 5.006
## 2 versicolor 5.936
## 3 virginica 6.588
조건을 만족하는 자료에 한해서 연산 할 수 있다. 또, function을 따로 줄 수 있다.
ddply(iris,.(Species,Petal.Width>0.4),summarise,mean.Length=mean(Sepal.Length))
## Species Petal.Width > 0.4 mean.Length
## 1 setosa FALSE 5.004167
## 2 setosa TRUE 5.050000
## 3 versicolor TRUE 5.936000
## 4 virginica TRUE 6.588000
ddply(iris,'Species',function(x){data.frame(mean.Length=mean(x$Sepal.Length))})
## Species mean.Length
## 1 setosa 5.006
## 2 versicolor 5.936
## 3 virginica 6.588