代码之家  ›  专栏  ›  技术社区  ›  user121

如何用r中的每一个标量乘以每一列?

r
  •  2
  • user121  · 技术社区  · 6 年前

    我有以下变量 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)
    

    我想把 按中的每个值 R (例如,第一列 乘以中的第一个值 R ,的第二列 乘以第二个值 R 等等)。

    具体来说,对于这个示例,我要查找的输出是:

          10   900   1020
          20    80    690
          30    60    360
          40    40   1350
    

    我刚接触R,正在寻找实现这一点的最佳方法。

    2 回复  |  直到 6 年前
        1
  •  7
  •   G. Grothendieck    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

        2
  •  0
  •   Onyambu    6 年前

    你只需要做双重转置:

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