r 加权矩阵

r weighting a matrix

我有一个 nx5 矩阵。前6行如下

  x1    x2   x3  x4  x5
   1    30    3  43   0
   3    40    2  35   0
   3    50    7  72   0
   4    40   58  63  10
   1    20   19  61  10
   4    20    5  49   0

我还有代表权重的 nx1 矩阵列。

 w
 1.080042
 1.083287
 1.141108
 1.191246
 1.117395
 1.081123

我的目标是用这些权重对初始 nx5 矩阵进行加权。我试过了 a%*%w 但这导致了 5x1 矩阵。这不是我想要的。我的问题是如何生成加权 nx5 矩阵?谢谢

如果我们想将第一个数据集行的值与第二个数据集的相应值相乘

df1 * df2[row(df1)]

matrixes

m1 * m2[row(m1)]

或使用sweep

sweep(df1, 1, df2$w, `*`)
sweep(m1, 1, m2[,1], `*`)

数据

df1 <- structure(list(x1 = c(1L, 3L, 3L, 4L, 1L, 4L), x2 = c(30L, 40L, 
50L, 40L, 20L, 20L), x3 = c(3L, 2L, 7L, 58L, 19L, 5L), x4 = c(43L, 
35L, 72L, 63L, 61L, 49L), x5 = c(0L, 0L, 0L, 10L, 10L, 0L)), 
class = "data.frame", row.names = c(NA, 
-6L))

df2 <- structure(list(w = c(1.080042, 1.083287, 1.141108, 1.191246, 
1.117395, 1.081123)), class = "data.frame", row.names = c(NA, 
-6L))

m1 <- as.matrix(df1)
m2 <- as.matrix(df2)

如果您只是将每一列乘以向量,那么只需

mt * vc

其中 mt 是您的矩阵(名称),vc 是您的向量(名称),例如取

mt <- (diag(5)+0.1)
vc <- c(1:5)
mt * vc

给予

     [,1] [,2] [,3] [,4] [,5]
[1,]  1.1  0.1  0.1  0.1  0.1
[2,]  0.2  2.2  0.2  0.2  0.2
[3,]  0.3  0.3  3.3  0.3  0.3
[4,]  0.4  0.4  0.4  4.4  0.4
[5,]  0.5  0.5  0.5  0.5  5.5

如果您的权重在一列矩阵中,则首先使用 as.vector()

转换为向量