数据 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)
我想知道是否可以以一种优雅的方式一次完成,或者我如何才能正确计算行*向量乘积。
谢谢
我们可以使用 sweep
对 mat
的列应用乘积函数:
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()
比替代计算更快。
我有一个看起来像这样的矩阵
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)
我想知道是否可以以一种优雅的方式一次完成,或者我如何才能正确计算行*向量乘积。
谢谢
我们可以使用 sweep
对 mat
的列应用乘积函数:
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()
比替代计算更快。