2017-11-15 10 views
1

に非常に大きなデータフレームのためSUMPRODUCTを実行するために、私は次の操作を行いたい対象の(数千行の列の数百数十):最も計算効率的な方法は、私は非常に大規模なデータフレームを持っているR

  • 与えられた重みのベクトルを使用して列上の要素の重み付けされた組み合わせを計算する(一部の重みはゼロかもしれない)
  • 対応するベクトルの重み付けされた組み合わせを含む列をそれぞれ新しいデータフレームを作成するウェイト

これを行うのに最も計算効率の良い方法は何でしょうか?

簡単な例を複製する:@BenoitLondonが述べたように

require(tidyverse) 

theDatesTibble <-c(lubridate::mdy("3/15/2017"), lubridate::mdy("4/15/2017"), lubridate::mdy("5/15/2017"), lubridate::mdy("6/15/2017")) 

theValuesTibble_A <- c(123.45, 201.29, 337.78, 275.98) 
theValuesTibble_B <- c(113.45, 221.29, 327.78, 255.98) 
theValuesTibble_C <- c(143.45, 251.29, 307.78, 235.98) 
theValuesTibble_D <- c(153.45, 231.29, 347.78, 225.98) 
theValuesTibble_E <- c(163.45, 291.29, 323.78, 215.98) 

theTibble <- tibble(Dates= theDatesTibble, A = theValuesTibble_A, B = theValuesTibble_B, 
        C = theValuesTibble_C, D = theValuesTibble_D, E = theValuesTibble_E) 

weights_1 <- c(2.3, 0.0, 3.6, 12.7, 8.9) 
weights_2 <- c(0.0, 0.0, 13.6, 4.7, 0.0) 
weights_3 <- c(6.3, 4.4, 8.6, 12.3, 18.9) 
+0

私にはマトリックス製品のように見えます... – BenoitLondon

答えて

1

、行列積は、あなたが欲しいものを行うための最速の方法だろう。

cbind.data.frame(
    theTibble[1], 
    as.matrix(theTibble[-1]) %*% cbind(weights_1, weights_2, weights_3) 
) 
+0

ありがとう、私は答えを受け入れました – Aex

関連する問題