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