के लिए 21 दिन रोलिंग योग करने का सबसे तेज़ तरीका मेरे पास एक बड़ा डेटाफ्रेम (3 एम + पंक्तियां) है। मैं 21 दिनों की खिड़की में एक निश्चित गतिविधि टाइप दिखाई देने की संख्या को गिनने की कोशिश कर रहा हूं। मैंने Rolling Sum by Another Variable in R से अपना समाधान तैयार किया है। लेकिन सिर्फ एक गतिविधि टाइप के लिए काफी समय लगता है। मुझे नहीं लगता था कि 3 एम + पंक्तियां ऐसी चीज हैं जो अनजान समय लेती हैं। नीचे है कि मैं क्या करने की कोशिश की:एक गतिविधि प्रकार
dt <- read.table(text='
Name ActivityType ActivityDate
John Email 1/1/2014
John Email 1/3/2014
John Webinar 1/5/2014
John Webinar 1/20/2014
John Webinar 3/25/2014
John Email 4/1/2014
John Email 4/20/2014
Tom Email 1/1/2014
Tom Webinar 1/5/2014
Tom Webinar 1/20/2014
Tom Webinar 3/25/2014
Tom Email 4/1/2014
Tom Email 4/20/2014
', header=T, row.names = NULL)
library(data.table)
library(reshape2)
dt$ActivityType <- factor(dt$ActivityType)
dt$ActivityDate <- as.Date(dt$ActivityDate, "%m/%d/%Y")
dt <- dt[order(dt$Name, dt$ActivityDate),]
dt <- dcast(dt, Name + ActivityDate ~ ActivityType, fun.aggregate=length)
setDT(dt)
#Build reference table
Ref <- dt[,list(Compare_Value=list(I(Email)),Compare_Date=list(I(ActivityDate))), by=c("Name")]
#Use mapply to get last 21 days of value by Name
dt[,Email_RollingSum := mapply(ActivityDate=ActivityDate,Name=Name, function(ActivityDate, Name) {
d <- as.numeric(Ref$Compare_Date[[Name]] - ActivityDate)
sum((d <= 0 & d >= -21)*Ref$Compare_Value[[Name]])})]
और यह सिर्फ ActivityType = ईमेल है, तो मैं अन्य ActivityType के स्तर के लिए भी ऐसा ही करने की है। जिस लिंक को मैंने समाधान दिया है, उससे "मैकप्ली" के बजाय "मैकप्ली" का उपयोग करने के बारे में बात की गई। कृपया मुझे बताएं कि मैं मैकप्ली या किसी अन्य समाधान का उपयोग कैसे कर सकता हूं जो इसे तेज कर देगा।
नीचे अपेक्षित आउटपुट है। प्रत्येक पंक्ति के लिए, मैं गतिविधि दिनांक लेता हूं और उससे 21 दिन पहले और 21 दिन की अवधि मेरी टाइम विंडो है। मैं उस समय विंडो में गतिविधि समय टाइप = "ईमेल" प्रकट करता हूं।
Name ActivityType ActivityDate Email_RollingSum
John Email 1/1/2014 1
John Email 1/3/2014 2
John Webinar 1/5/2014 2
John Webinar 1/20/2014 2
John Webinar 3/25/2014 0
John Email 4/1/2014 1
John Email 4/20/2014 2
Tom Email 1/1/2014 1
Tom Webinar 1/5/2014 1
Tom Webinar 1/20/2014 1
Tom Webinar 3/25/2014 0
Tom Email 4/1/2014 1
Tom Email 4/20/2014 2
मैं अक्सर संख्यात्मक करने के लिए अपने दिनांकों परिवर्तित जब पंक्तियों के लाखों लोगों के साथ काम कर। as.numeric ($ ActivityDate डीटी)। समाधान नहीं बल्कि शायद एक सुधार। – Jordan
चूंकि ओपी स्पष्ट रूप से गति के बारे में है, इसलिए इसे विभिन्न तरीकों से प्राप्त समय के साथ अपडेट करना अच्छा होगा। – eddi
वॉल्ट्स के दृष्टिकोण ने 1.89 घंटे लिया। कुछ कारणों से, मैं एडडी के दृष्टिकोण की कोशिश करते समय दो बार स्मृति से बाहर भाग गया। जब एक्सेल ने मेरे कंप्यूटर को दुर्घटनाग्रस्त कर दिया तो खसना का दृष्टिकोण चल रहा था (2 घंटे से थोड़ा अधिक)। डेटाटेबल कॉलम के खिलाफ – gibbz00