如何将每列乘以R中的每个标量?

时间:2018-06-29 22:41:32

标签: r

我有以下变量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的新手,正在寻找实现此目的的最佳方法。

2 个答案:

答案 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