按组矩阵乘法

Matrix multiplication by group

我正在做两个矩阵的乘法,即 beta 和 Xs。 但是我的数据有一个组变量,我按组进行了回归。 这是我正在尝试做的一个例子。

matx <- matrix(c(1,1,2,1,3,4,2,5,6,2,7,8,3,9,10,3,11,12),nrow=6,ncol=3,byrow=T)
colnames(matx) <- c("group","x1","x2")
b <- matrix(c(1,3,4,2,5,6,3,0,0),nrow=3,ncol=3,byrow=T)
colnames(b) <- c("group","b1","b2")

我想做的是将 matxb 乘以 group 变量。 第 1 组的 x1 和 x2 应乘以第 1 组的 b1 b2。 是否有任何代码可以简化而不是按组分隔数据?

我们可以遍历 'group' 的 unique 值,对两个矩阵进行子集化并执行 %*%

sapply(unique(matx[,'group']), function(i) 
          matx[matx[,1]==i,-1]%*% b[b[,1]==i, -1])
#     [,1] [,2] [,3]
#[1,]   11   61    0
#[2,]   25   83    0