数据 frame/matrix 行时间 vector/list 元素明智

Data frame/matrix row times vector/list element wise

我有一个看起来像这样的矩阵

raw<- c(1,2,3,4,5,6,7,8,9)
mat<- matrix(raw,ncol = 3, nrow = 3)

来接我

      [,1] [,2] [,3]
[1,]    1    4    7
[2,]    2    5    8
[3,]    3    6    9

加上向量或列表

vector<-c(1,2,3)

我需要做的是将每一行乘以相应的向量条目 即 1*1 , 4*2, 7* 3 等等

我的最终目标是计算行和向量的加权平均值。

我尝试使用

apply(c(mat,vector),1,prod)

我想知道是否可以以一种优雅的方式一次完成,或者我如何才能正确计算行*向量乘积。

谢谢

我们可以使用 sweepmat 的列应用乘积函数:

sweep(mat, 2, vector, '*')
#     [,1] [,2] [,3]
#[1,]    1    8   21
#[2,]    2   10   24
#[3,]    3   12   27

如果你只想要问题中的操作你可以做

mat * rep(vector, each=3)  # or
mat * rep(vector, each=nrow(mat))  # or
mat * matrix(vector, nrow(mat), ncol(mat), byrow=TRUE)

在我读到的评论中,您想要计算结果矩阵的行方向平均值。所以你可以这样做:

rowMeans(mat*rep(vector, each=nrow(mat))) # or:
apply(mat, 1, weighted.mean, w=vector)*mean(vector) # both steps together

通常函数 rowMeans() 比替代计算更快。