समस्या जो मैं हल करने का प्रयास कर रहा हूं वह यह है कि मेरे पास एक क्रमबद्ध POSIXct चर के साथ डेटा फ्रेम है। प्रत्येक पंक्ति को वर्गीकृत किया जाता है और मैं प्रत्येक स्तर के लिए प्रत्येक पंक्ति के बीच समय अंतर प्राप्त करना चाहता हूं और उस डेटा को एक नए चर में जोड़ना चाहता हूं। पुनरुत्पादित समस्या नीचे दी गई है। नीचे दिया गया फ़ंक्शन इस प्रश्न के उद्देश्य के लिए यादृच्छिक समय के साथ नमूना डेटा बनाने के लिए है।एक पंक्ति और डेटा की पिछली पंक्ति के बीच समय अंतर की गणना कैसे करें
random.time <- function(N, start, end) {
st <- as.POSIXct(start)
en <- as.POSIXct(end)
dt <- as.numeric(difftime(en, st, unit="sec"))
ev <- sort(runif(N, 0, dt))
rt <- st + ev
return(rt)
}
समस्या का अनुकरण के लिए कोड के रूप में नीचे है:
set.seed(123)
category <- sample(LETTERS[1:5], 20, replace=TRUE)
randtime <- random.time(20, '2015/06/01 08:00:00', '2015/06/01 18:00:00')
df <- data.frame(category, randtime)
उम्मीद डेटा फ्रेम जिसके परिणामस्वरूप के रूप में नीचे है:
>category randtime timediff (secs)
>A 2015-06-01 09:05:00 0
>A 2015-06-01 09:06:30 90
>A 2015-06-01 09:10:00 210
>B 2015-06-01 10:18:58 0
>B 2015-06-01 10:19:58 60
>C 2015-06-01 08:14:00 0
>C 2015-06-01 08:16:30 150
उत्पादन में प्रत्येक उपसमूह पहली पंक्ति होगा 0 के timediff मूल्य के साथ कोई पिछली पंक्ति नहीं है। मैं श्रेणी के अनुसार समूह करने में सक्षम था और मतभेदों की गणना करने के लिए निम्नलिखित फ़ंक्शन को कॉल करने में सक्षम था लेकिन सभी श्रेणी समूहों के लिए अंतिम आउटपुट को एकत्रित नहीं कर सका।
getTimeDiff <- function(x) {
no_rows <- nrow(x)
if(no_rows > 1) {
for(i in 2:no_rows) {
t <- x[i, "randtime"] - x[i-1, "randtime"]
}
}
}
मैं बिना किसी किस्मत के दो दिनों के लिए रहा हूं, इसलिए किसी भी मदद की सराहना करता हूं। धन्यवाद।
धन्यवाद। यह आवश्यक रूप से आउटपुट की व्यवस्था में आंशिक रूप से हल करता है। हालांकि अंतराल() पिछली पंक्ति के समय को timediff मान के रूप में देता है और वास्तविक अंतर नहीं। – Mntester
@Mntester तय। – JasonAizkalns