【问题标题】:Matrix multiplication of each row in data frame数据框中每一行的矩阵乘法
【发布时间】:2021-03-22 21:18:14
【问题描述】:

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


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))

【问题讨论】:

  • @user20650 所以在基础 R 中:data$multiplication &lt;- as.matrix(data) %*% vector

标签: r matrix dplyr matrix-multiplication


【解决方案1】:

你可以使用apply:

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

【讨论】:

    【解决方案2】:

    一个选项可能是:

    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
    

    【讨论】:

      【解决方案3】:

      使用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 日创建

      【讨论】:

        【解决方案4】:

        我们可以从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
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-11-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-09-22
          • 1970-01-01
          • 2013-03-17
          相关资源
          最近更新 更多