डेटा.table पैकेज के साथ एक स्लाइडिंग विंडो फ़ंक्शन को लागू करने का सबसे अच्छा (सबसे तेज़ तरीका) क्या है?आर डेटाटेबल स्लाइडिंग विंडो
मैं रोलिंग औसत की गणना करने की कोशिश कर रहा हूं लेकिन प्रति दिन कई पंक्तियां हैं (2 अतिरिक्त कारकों के कारण), जो मुझे लगता है कि चिड़ियाघर रोलप्ली फ़ंक्शन काम नहीं करेगा। लूप के लिए एक बेवकूफ का उपयोग करने का एक उदाहरण यहां दिया गया है:
library(data.table)
df <- data.frame(
id=30000,
date=rep(as.IDate(as.IDate("2012-01-01")+0:29, origin="1970-01-01"), each=1000),
factor1=rep(1:5, each=200),
factor2=1:5,
value=rnorm(30, 100, 10)
)
dt = data.table(df)
setkeyv(dt, c("date", "factor1", "factor2"))
get_window <- function(date, factor1, factor2) {
criteria <- data.table(
date=as.IDate((date - 7):(date - 1), origin="1970-01-01"),
factor1=as.integer(factor1),
factor2=as.integer(factor2)
)
return(dt[criteria][, value])
}
output <- data.table(unique(dt[, list(date, factor1, factor2)]))[, window_median:=as.numeric(NA)]
for(i in nrow(output):1) {
print(i)
output[i, window_median:=median(get_window(date, factor1, factor2))]
}
+1, अच्छा सवाल। – Ryogi
+1 भी। क्या आप डेटा आकार और समय के बारे में अधिक जानकारी प्रदान कर सकते हैं। एलन के उत्तर से आपकी टिप्पणी से (एलन और एलन अलग-अलग लोग हैं?), इसमें 6.4s (बनाम 973s 'data.frame' के लिए) लेते हैं और आप 6.4 और आगे सुधारना चाहते हैं? –
एलन और एलन अलग-अलग लोग हैं :)। डेटासेट में ~ 650,000 पंक्तियां हैं। मैं ऐसे समाधान के साथ आया जो बहुत तेजी से काम करता है लेकिन बहुत यादगार गहन है। इस पर कोई विचार कैसे आगे बढ़ाया जा सकता है? – alan