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)]
或 matrix
es
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()
转换为向量
我有一个 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)]
或 matrix
es
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()