如何引用多个数据框列来计算 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
我目前正在通过手动引用每个列名来计算我的数据框的加权平均列。有没有办法通过乘以数组集来缩短代码
例如:
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