你可能会在函数中找到你想要的?summarise
。我可以复制您的代码summarise
如下:
library(plyr)
set.seed(123)
frame <- data.frame(class=sample(LETTERS[1:5], replace = TRUE), x=rnorm(20),
x2 = rnorm(20), weights=rnorm(20))
ddply(frame, .(class), summarise,
x2 = weighted.mean(x2, weights))
为此x
,只需将该行添加到summarise
函数中:
ddply(frame, .(class), summarise,
x = weighted.mean(x, weights),
x2 = weighted.mean(x2, weights))
编辑:如果您想对多列进行操作,请使用colwise
ornumcolwise
代替summarise
,或者使用包summarise
对melt
ed 数据框执行操作reshape2
,然后cast
返回原始形式。这是一个例子。
那将给出:
wmean.vars <- c("x", "x2")
ddply(frame, .(class), function(x)
colwise(weighted.mean, w = x$weights)(x[wmean.vars]))
最后,如果您不喜欢指定wmean.vars
,您也可以这样做:
ddply(frame, .(class), function(x)
numcolwise(weighted.mean, w = x$weights)(x[!colnames(x) %in% "weights"]))
它将计算每个数值字段的加权平均值,不包括权重本身。