【问题标题】:How to multiply each column by each scalar in R?如何将每列乘以 R 中的每个标量?
【发布时间】:2018-12-09 03:35:09
【问题描述】:

我有以下变量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 新手,正在寻找最佳的方法来做到这一点。

【问题讨论】:

  • 我认为Q * r应该给你你想要的。

标签: r


【解决方案1】:

试试这个:

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

【讨论】:

    【解决方案2】:

    你只需要做双重转置:

    t(r*t(Q))
          a   b    c
    [1,] 10 900 1020
    [2,] 20  80  690
    [3,] 30  60  360
    [4,] 40  40 1350
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-11
      • 2011-08-05
      • 1970-01-01
      • 2022-01-18
      • 1970-01-01
      • 1970-01-01
      • 2019-03-28
      • 1970-01-01
      相关资源
      最近更新 更多