簡體   English   中英

將 dataframe 列與另一個 dataframe 中的參數相乘

[英]multiply dataframe columns with its parameters in another dataframe

我有 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 個變量,我如何在不輸入整個方程的情況下做到這一點? 我的變量和參數的順序總是相同的。

我們可以使用Map/Reduce

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

或使用%*%

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

-檢查 OP 的 output

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

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

或者使用sweep/rowSums的另一個選項

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

你可以試試:

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

在實踐中,您想要執行矩陣運算,因此我會執行以下操作:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM