数据框中每一行的矩阵乘法

Matrix multiplication of each row in data frame

这应该是初级的,但我无法理解它。 我有一个数据框,想创建一个新变量作为每一行乘以预先指定的向量的矩阵。


library(dplyr)
data <- data.frame(matrix(1:6,2))
vector <- c(1,0,1)

##NOT WORKING
data <- data %>%
mutate(multiplication = as.numeric(data[,]) %*% vector)

mm <- function(x,y){
  n <- as.numeric(x)
  m <- n %*% y
  print(as.numeric(m))
}

##NOT WORKING
data$mm <- lapply(data[,], function(x) mm(x,vector))

您可以使用 apply:

data %>% mutate(multiplication = apply(., 1, function(x) x %*% vector))
#>   X1 X2 X3 multiplication
#> 1  1  3  5              6
#> 2  2  4  6              8

一个选项可以是:

data %>%
 rowwise() %>%
 mutate(multiplication = sum(c_across(everything()) * vector))

     X1    X2    X3 multiplication
  <int> <int> <int>          <dbl>
1     1     3     5              6
2     2     4     6              8

使用as.matrix


library(tidyverse)
data <- data.frame(matrix(1:6,2))
vector <- c(1,0,1)

data %>%
  mutate(multiplication = as.matrix(data[,]) %*% vector)
#>   X1 X2 X3 multiplication
#> 1  1  3  5              6
#> 2  2  4  6              8

reprex package (v0.3.0)

于 2020-12-11 创建

我们可以使用 base R

中的 crossprod
data$multiplication <- crossprod(t(data), vector)[,1]

-输出

data
#  X1 X2 X3 multiplication
#1  1  3  5              6
#2  2  4  6              8