数据框/矩阵行时间向量/列表元素明智

时间:2016-02-02 20:42:23

标签: r dataframe apply weighted-average

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

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)

我想知道它是否可以立即以优雅的方式完成,或者我如何正确计算行*矢量产品。

感谢

2 个答案:

答案 0 :(得分:3)

我们可以使用sweepmat列上应用产品功能:

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

答案 1 :(得分:2)

如果您只想进行问题中的操作,可以

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()比其他计算更快。