मुझे प्रति पंक्ति (6 एम + पंक्तियों) के भारित साधनों की गणना करने की आवश्यकता है, लेकिन इसमें बहुत लंबा समय लगता है। वजन के साथ स्तंभ एक चरित्र-क्षेत्र है, इसलिए भारित। मीन सीधे उपयोग नहीं किया जा सकता है।प्रति पंक्ति डेटाटेबल फ़ंक्शन बहुत धीमा
पृष्ठभूमि डेटा:
library(data.table)
library(stringr)
values <- c(1,2,3,4)
grp <- c("a", "a", "b", "b")
weights <- c("{10,0,0,0}", "{0,10,0,0}", "{10,10,0,0}", "{0,0,10,0}")
DF <- data.frame(cbind(grp, weights))
DT <- data.table(DF)
string.weighted.mean <- function(weights.x) {
tmp.1 <- na.omit(as.numeric(unlist(str_split(string=weights.x, pattern="[^0-9]+"))))
tmp.2 <- weighted.mean(x=values, w=tmp.1)
}
यहाँ data.frames के साथ यह कैसे किया जा सकता है (बहुत धीमी गति से) है:
DF$wm <- mapply(string.weighted.mean, DF$weights)
यह काम करता है लेकिन जिस तरह से बहुत धीमी गति से (घंटे) है:
DT[, wm:=mapply(string.weighted.mean, weights)]
चीजों को गति देने के लिए अंतिम पंक्ति को फिर से कैसे बदला जा सकता है?
आपके पास एक अच्छा जवाब है। बस जोड़ने के लिए: मैं एक खराब इनपुट प्रारूप के बारे में सोचने के लिए संघर्ष। यदि संभव हो तो वज़न को संख्यात्मक वैक्टर के रूप में स्टोर करने के लिए सूची कॉलम का उपयोग करें और दक्षता के लिए कभी भी स्तंभ द्वारा _ever_ पुनरावृत्त न करें, हमेशा कॉलम द्वारा। और डेटा मैटेबल से इस तरह के कार्यों पर एक मैट्रिक्स बेहतर हो सकता है। –