r - R 中多列的聚合和加权平均值

标签 r data.table weighted-average

问题基本上是这样的:Aggregate and Weighted Mean in R .

但我希望它使用 data.table 在几列上进行计算,因为我有数百万行。所以像这样:

set.seed(42)   # fix seed so that you get the same results
dat <- data.frame(assetclass=sample(LETTERS[1:5], 20, replace=TRUE), 
                                    tax=rnorm(20),tax2=rnorm(20), assets=1e7+1e7*runif(20), assets2=1e6+1e7*runif(20))

DT <- data.table(dat)

我可以计算一列 Assets 的加权平均值,如下所示:

DT[,list(wret = weighted.mean(tax,assets)),by=assetclass]

但是如何在 Assets 和 Assets 2上执行此操作?
如果有多个列,例如 col=c("assets1", "assets2", "assets3", ... ),该怎么办? 是否也可以用于税收,tax1...

最佳答案

因此您可以对多列权重执行此操作

DT <- data.table(assetclass=sample(LETTERS[1:5], 20, replace=TRUE), 
                  tax=rnorm(20), assets=1e7+1e7*runif(20), asets2=1e6+1e7*runif(20))
DT[, lapply(.SD, FUN=weighted.mean, x=tax), by=assetclass, .SDcols=3:4]
#    assetclass      assets       asets2
# 1:          D -0.14179882 -0.003717957
# 2:          B  0.61146928  0.523913589
# 3:          E -0.28037796 -0.147677384
# 4:          C -0.09658125 -0.010338894
# 5:          A  0.74954460  0.750190947

或者您可以从 .SD 中排除非权重列:

DT[, lapply(.SD, FUN=weighted.mean, x=tax), by=assetclass, .SDcols=-(1:2)]

这是使用矩阵乘法的变体:

DT[, as.list(crossprod(as.matrix(.SD), tax)/colSums(.SD)), by=assetclass, .SDcols=-(1:2)]

矩阵乘法也可以对多列tax1tax2、...进行计算

DT <- data.table(assetclass=sample(LETTERS[1:5], 20, replace=TRUE), 
                 tax1=rnorm(20), tax2=rnorm(20), assets=1e7+1e7*runif(20), asets2=1e6+1e7*runif(20))
DT[, as.list(crossprod(as.matrix(.SD), tax1)/colSums(.SD)), by=assetclass, .SDcols=-(1:2)]
DT[, as.list(crossprod(as.matrix(.SD), tax2)/colSums(.SD)), by=assetclass, .SDcols=-(1:2)]
DT[, as.list(crossprod(as.matrix(.SD), cbind(tax1, tax2))/colSums(.SD)), by=assetclass, .SDcols=-(1:2)]

关于r - R 中多列的聚合和加权平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42993956/

相关文章:

r - 如何添加图例以使用来自多个数据框的数据进行绘图

r - 如何将 Excel 中的单元格格式(缩进)信息读入 R?

r - 使用 data.table 对 r 中的序列求和

python - 用 Pandas 数据框计算加权平均值

julia - 短期股票交易加权平均成本

r - 有没有一种优雅的方法可以在 R 中按行名重新排序数据框

r - 过滤数据帧时 NA 的影响

r - 如何计算R中data.table中出现的组合

r - 更改 data.table 的列位置

python - 有没有办法让 Pandas ewm 在固定窗口上运行?