如何引用多个数据框列来计算 R 中的新加权平均值列

How to reference multiple dataframe columns to calculate a new column of weighted averages in R

我目前正在通过手动引用每个列名来计算我的数据框的加权平均列。有没有办法通过乘以数组集来缩短代码 例如: df[,c(A,B,C)]df[,c(PerA,PerB,PerC)] 求加权平均值,就像 Excel 中的 SUMPRODUCT?特别是如果我有多个输入列来计算加权平均列

df$WtAvg = df$A*dfPerA + df$B*df$PerB + df$C*df$PerC

在不转换数据帧的情况下,假设数据帧的前半部分是大小,后半部分是权重,您可以在 apply 函数中使用 weighted.mean 函数:

df$WtAvg = apply(df,1,function(x){weighted.mean(x[1:(ncol(df)/2)],
                                                x[(ncol(df)/2+1):ncol(df)])})

你得到以下输出:

> df
  A B C PerA PerB PerC WtAvg
1 1 2 3  0.1  0.2  0.7   2.6
2 4 5 6  0.5  0.3  0.2   4.7
3 7 8 9  0.6  0.1  0.3   7.7