Умножение матрицы на кадре данных в R? - PullRequest
0 голосов
/ 13 июля 2020

Существует ли установленный / передовой способ матричного умножения data.frame в отличие от объекта строго класса matrix? То есть есть ли альтернатива или вариант %*%, который с радостью принимает data.frames?

Единственная цель - сохранить беспорядок постороннего кода, используемого для преобразования data.frame в матрицу перед предоставляя его %*%.

Например, это

as.matrix(data.frame(a=c(1,2,3), b=c(5,6,7))) %*% c(2,2)

можно упростить до

data.frame(a=c(1,2,3), b=c(5,6,7)) %*% c(2,2)

Ответы [ 2 ]

1 голос
/ 13 июля 2020

Вы можете использовать sweep, чтобы умножить значения в кадре данных на вектор, а затем использовать rowSums.

rowSums(sweep(data.frame(a=c(1,2,3), b=c(5,6,7)), 2, c(2, 2), `*`))
#[1] 12 16 20

Другой метод - транспонировать фрейм данных и умножить, а затем взять colSums, однако транспонирование преобразует фрейм данных в матрицу.

colSums(t(data.frame(a=c(1,2,3), b=c(5,6,7))) * c(2, 2))
0 голосов
/ 13 июля 2020

Матричное умножение data.frame вот так

library(mmr)

x <- data.frame(a=c(1,2,3), b=c(5,6,7))
y <- c(2,2)


mm(x, y)
#   V1
# 1 12
# 2 16
# 3 20

x %mm% y
#   V1
# 1 12
# 2 16
# 3 20
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...