R的ave()
功能比其名稱暗示的方式更有用 - 它基本上是tapply()
的一個版本,它允許您返回與輸入相同長度的矢量,並將這些值重新插入與輸入相同的順序。plyr中的'ave'類比嗎?
> x <- 1:10
> ave(x, x %% 2, FUN=function(d) d-mean(d))
[1] -4 -4 -2 -2 0 0 2 2 4 4
可以實現與ddply()
類似的效果,但它需要的數據的一對夫婦的額外副本,以及一對夫婦的輔助變量:
> x <- 1:10
> val <- ddply(data.frame(x=x, id=1:10), .(x %% 2),
function(d) {d$y <- d$x-mean(d$x); d})
> val[order(val$id),]$y
[1] -4 -4 -2 -2 0 0 2 2 4 4
有一些其他plyr
技術匹配我可以用ave()
獲得輕量級的方法嗎?
是的,ave'的plyr相當於'ave';)Plyr基本上是基於大於單個矢量的物體的基礎上工作的 - base R提供您需要的一切。 – hadley 2011-12-28 21:00:16