我有以下变量Q
a = c(1,2,3,4)
b = c(45,4,3,2)
c = c(34,23,12,45)
Q = cbind(a,b,c)
我还有另一个变量r
r = c(10,20,30)
我想将Q
的每一列乘以r
中的各个值(例如,Q
的第一列乘以r
中的第一值, Q
的第二列乘以r
中的第二个值,依此类推。
具体对于此示例,我正在寻找的输出是:
10 900 1020
20 80 690
30 60 360
40 40 1350
我是R的新手,正在寻找实现此目的的最佳方法。
答案 0 :(得分:6)
尝试一下:
Q %*% diag(r)
给予:
[,1] [,2] [,3]
[1,] 10 900 1020
[2,] 20 80 690
[3,] 30 60 360
[4,] 40 40 1350
或以下任何一项:
t(t(Q) * r)
Q * r[col(Q)]
sweep(Q, 2, r, "*")
Q * rep(r, each = nrow(Q))
mapply("*", as.data.frame(Q), r)
除了使用除法以外,对于相同的问题,请参见以下答案: How to divide each row of a matrix by elements of a vector in R
答案 1 :(得分:0)
您只需要进行两次移调:
t(r*t(Q))
a b c
[1,] 10 900 1020
[2,] 20 80 690
[3,] 30 60 360
[4,] 40 40 1350