Как умножить каждый столбец на каждый скаляр в R? - PullRequest
0 голосов
/ 30 июня 2018

У меня есть следующая переменная 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 голосов
/ 30 июня 2018

Попробуйте это:

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)

См. Этот ответ для того же вопроса, за исключением использования деления: Как разделить каждую строку матрицы на элементы вектора в R

0 голосов
/ 30 июня 2018

вам просто нужно сделать двойное транспонирование:

t(r*t(Q))
      a   b    c
[1,] 10 900 1020
[2,] 20  80  690
[3,] 30  60  360
[4,] 40  40 1350
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...