r - 如何使用另一个矩阵的列(或行)计算矩阵的每一列(或行)的加权平均值?
问题描述
我有两个相同大小的矩阵:m
看起来w
如下:
set.seed(5)
m <- matrix(rexp(90), nrow = 3 , ncol = 3)
set.seed(10)
w <- matrix(rexp(90), nrow = 3 , ncol = 3)
我想计算用作权重的加权m
平均值w
。更准确地说,我想对m
使用相同行(或列)w
作为权重的每一行(或列)执行此操作。结果将理想地存储在向量中。例如:
w_mean_col <- c(weighted.mean(m[,1] , w[,1]) ,
weighted.mean(m[,2] , w[,2]) ,
weighted.mean(m[,3] , w[,3]) )
对于列,并且:
w_mean_row <- c(weighted.mean(m[1,] , w[1,]) ,
weighted.mean(m[2,] , w[2,]) ,
weighted.mean(m[3,] , w[3,]) )
处理非常大的矩阵时,该代码非常不切实际。会有更好的代码自动执行此操作吗?
解决方案
你可以简单地做
colSums(m*w)/colSums(w) ## columns
# [1] 0.2519816 0.4546775 0.7812545
rowSums(m*w)/rowSums(w) ## rows
# [1] 0.2147437 0.5273465 1.0559481
这应该是最快的。
或者,如果您坚持weighted.mean()
使用mapply
.
mapply(weighted.mean, as.data.frame(m), as.data.frame(w), USE.NAMES=F) ## columns
# [1] 0.2519816 0.4546775 0.7812545
mapply(weighted.mean, as.data.frame(t(m)), as.data.frame(t(w)), USE.NAMES=F) ## rows
# [1] 0.2147437 0.5273465 1.0559481
推荐阅读
- go - 如何将 map[string]interface{} 转换为 io.Reader
- deep-learning - 深度学习静态+动态特征:什么时候使用静态作为动态的方法与多输入网络更好?
- postgresql - 如何在 Google Cloud SQL PostgreSQL 实例中配置 pg_trgm 相似度阈值参数
- typescript - TypeScript 和 Cypress 无法在自定义 cypress 命令中返回 true/false
- javascript - 查找嵌套数组的对象子对象的长度
- javascript - 如何在反应js中单击添加活动类
- python - 错误是: PermissionError: [Errno 13] Permission denied: 'C:\\ProgramData\\Microsoft\\Windows\\Start Menu\\Programs\\StartUp\\IP.PY'
- python - 解决错误 django-oauth-toolkit: raise AppRegistryNotReady("Models are not loaded yet.")
- stripe-payments - 在特定日期后取消条带订阅
- regex - 验证字符串 # 后跟数字,但 # 在每次出现后增加