R 如何使用另一个矩阵中的列(或行)计算矩阵中每列(或行)的加权平均数?

R 如何使用另一个矩阵中的列(或行)计算矩阵中每列(或行)的加权平均数?,r,matrix,R,Matrix,我有两个大小相同的矩阵:m和w,如下所示: set.seed(5) m <- matrix(rexp(90), nrow = 3 , ncol = 3) set.seed(10) w <- matrix(rexp(90), nrow = 3 , ncol = 3) 对于列,以及: w_mean_row <- c(weighted.mean(m[1,] , w[1,]) , weighted.mean(m[2,] , w[2,]) ,

我有两个大小相同的矩阵:
m
w
,如下所示:

set.seed(5)
m <- matrix(rexp(90), nrow = 3 , ncol = 3)

set.seed(10)
w <- matrix(rexp(90), nrow = 3 , ncol = 3)
对于列,以及:

w_mean_row <- c(weighted.mean(m[1,] , w[1,]) ,
                weighted.mean(m[2,] , w[2,]) ,
                weighted.mean(m[3,] , w[3,]) ) 

w_mean_row我们可以使用
tidyverse

library(dplyr)
as.data.frame(m) %>%
   summarise(across(everything(), 
       ~ weighted.mean(., as.data.frame(w)[[cur_column()]])))

或者我们可以在将矩阵按列拆分后使用
Map
,然后应用
加权.mean
得到相应的平均值

unlist(Map(weighted.mean, asplit(m, 2), asplit(w, 2)))
如果是按行,则按行拆分

unlist(Map(weighted.mean, asplit(m, 1), asplit(w, 1)))

或者可以对
循环使用

w_mean_col <- numeric(ncol(m))
for(i in seq_along(w_mean_col)) w_mean_col[i] <- weighted.mean(m[,i], w[,i])
w_mean\u col你可以简单地做

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

谢谢,第一个答案非常简单有效,不客气@Adrian!
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