Voici un exemple de ce que j'essaie de faire.
dtA <- data.table(A = 1:3, B = 4:6, D = 7:9) dtB <- data.table(id = c("A", "B", "C", "D"), multi = c(0.1, 0.2, 0.3, 0.4)) for(COL in c("A", "B", "D")) { dtA[, (COL) := get(COL) * dtB[id == COL, multi]] }
4 Réponses :
Voici un Data Stable.Table Code> Approche .. probablement pas la voie nichée .. mais cela fait le travail.
pense que ceci est un peu plus rapide que votre méthode ne peut pas vraiment voir où vous pourriez obtenir une vitesse significative, car je ne pense pas que vous faites quelque chose de particulièrement gaspillé Dans votre tentative. p> Edit: p> Ceci est environ 50% plus rapide à nouveau sur des exemples plus importants P> cn <- colnames(dtA)
dtA[,(cn) := mapply(function(x,y) x*y, dtA, dtB[cn, multi, on = 'id'], SIMPLIFY = FALSE)]
Voici une approche de base r qui donne p>
Il est possible que vous puissiez être mieux servi à l'aide d'une bibliothèque conçue pour calculer rapidement des produits, puis de stocker les résultats dans une carte ou d'autres formats. Par exemple, «RFast» est optimisé pour les calculs numériques sur les matrices. R 'Data.table' est excellent au stockage et à la récupération des grandes tables de données, mais par des magasins par défaut sous forme de liste (R):