【问题标题】:multiply dataframe columns with its parameters in another dataframe将数据框列与其参数相乘在另一个数据框中
【发布时间】:2020-11-03 04:49:29
【问题描述】:

我有 4 个变量的参数,如下所示

parameters <- data.frame(param.x1 = 0.02,
                         param.x2 = 0.03,
                         param.x1.sq = 0.05,
                         param.x2.sq = 0.03)

我也有下面显示的4个变量的对应值

set.seed(123)
  
dat <- data.frame(
           x1 = rnorm(5), 
           x2 = rnorm(5),
           x1.sq = rnorm(5),
           x2.sq = rnorm(5))

我想将每个变量乘以其对应的参数,然后相加如下所示

final.val <- (dat$x1 * parameters$param.x1) + 
             (dat$x2 * parameters$param.x2) + 
             (dat$x1.sq * parameters$param.x1.sq) + 
             (dat$x2.sq * parameters$param.x2.sq)

如果我有超过 4 个变量,如何在不输入整个方程的情况下执行此操作?我的变量和参数的顺序总是相同的。

【问题讨论】:

    标签: r function matrix dplyr apply


    【解决方案1】:

    实际上你想要执行矩阵运算,因此我会执行以下操作:

    c(as.matrix(dat)%*%t(as.matrix(parameters)))
    

    【讨论】:

      【解决方案2】:

      我们可以使用Map/Reduce

      final.val2 <- Reduce(`+`, Map(`*`, dat, parameters))
      

      或使用%*%

      final.val3 <- (as.matrix(dat) %*% unlist(parameters))[,1]
      

      -检查 OP 的输出

      identical(final.val, final.val2)
      #[1] TRUE
      
      identical(final.val, final.val3)
      #[1] TRUE
      

      或者sweep/rowSums的另一个选项

      rowSums(sweep(dat, 2,  unlist(parameters), `*`))
      

      【讨论】:

        【解决方案3】:

        你可以试试:

        mapply(function(x,y) x*y,dat,parameters)
        
                      x1          x2        x1.sq       x2.sq
        [1,] -0.011209513  0.05145195  0.061204090  0.05360739
        [2,] -0.004603550  0.01382749  0.017990691  0.01493551
        [3,]  0.031174166 -0.03795184  0.020038573 -0.05899851
        [4,]  0.001410168 -0.02060559  0.005534136  0.02104068
        [5,]  0.002585755 -0.01336986 -0.027792057 -0.01418374
        

        【讨论】:

          猜你喜欢
          • 2022-01-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-04-07
          • 2018-12-01
          • 1970-01-01
          • 2023-03-20
          • 2017-06-02
          相关资源
          最近更新 更多