अद्यतन करने के लिए पहले गणना की गई पंक्ति का उपयोग करना मेरे पास बहुत बड़ी समय श्रृंखला है और मुझे शुरुआत में कुछ मनमाना मूल्य और वर्तमान समय अवधि में परिवर्तन के आधार पर एक अलग समय श्रृंखला बनाने की आवश्यकता है। असली डाटासेट में यह परिवर्तन डेटा फ्रेम के अन्य चर पर निर्भर करता है, लेकिन मेगावाट का एक उद्देश्य के लिए, मैं इसे पुन: इस प्रकार है:आर प्रोग्रामिंग: प्रत्येक पंक्ति
initial_value <- 100
set.seed(123)
library(data.table)
df <- as.data.table(data.frame(num = c(1:10),change = rnorm(10)))
नया वेरिएबल value
पिछली अवधि में अपने स्वयं के मूल्य के रूप में परिभाषित किया गया है के साथ साथ वर्तमान अवधि में change
। पहले अवलोकन में मूल्य मनमाने ढंग से चुने गए initial_value
द्वारा निर्धारित किया जाता है। अगर वहाँ value
पर कोई प्रतिबंध नहीं होती तो यह
df <- df[, value0 := initial_value + cumsum(change)]
यह बहुत तेजी से data.table
उपयोग कर रहा है के रूप में बस बनाया जा सकता है। हालांकि, दुर्भाग्य से, change
पिछले अवधि में वास्तविक value
पर भी निर्भर हो सकता है। विशेष रूप से, मान लें कि जब भी यह 102 तक पहुंच जाता है, तो श्रृंखला को अगली अवधि में initial_value
तक पहुंचने की आवश्यकता होती है और वहां 3 अवधि तक रहती है।
df$value <- NA
df$value[1] <- initial_value + df$change[1]
for (i in 2:nrow(df)) {
if (is.na(df$value[i])) {
if (df$value[i-1] < 102) {
df$value[i] <- df$value[i-1] + df$change[i]
} else {
df$value[i:(i+2)] <- initial_value
}
}
}
:
num change value0 value
1: 1 -0.56047565 99.43952 99.43952
2: 2 -0.23017749 99.20935 99.20935
3: 3 1.55870831 100.76806 100.76806
4: 4 0.07050839 100.83856 100.83856
5: 5 0.12928774 100.96785 100.96785
6: 6 1.71506499 102.68292 102.68292
7: 7 0.46091621 103.14383 100.00000
8: 8 -1.26506123 101.87877 100.00000
9: 9 -0.68685285 101.19192 100.00000
10: 10 -0.44566197 100.74626 99.55434
अब तक एक ही रास्ता है कि मैं इस परिणाम का उत्पादन करने में कामयाब रहे एक पाश उपयोग कर रहा है: इस प्रकार, निम्न डेटा फ्रेम में, मैं चर value
बनाने के लिए है, जबकि कोड ऊपर value0
उत्पादन की जरूरत है
हालांकि, लाखों अवलोकनों के दर्जनों (दर्जनों) पर लूपिंग बेहद धीमी है। क्या संभवतः इसे सदिश बनाने या प्रक्रिया को अधिक कुशलता से चलाने का कोई तरीका है?
कमाल! इसके लिए धन्यवाद! मुझे नहीं पता था कि आरसीपीपी लूप इतनी तेजी से काम कर सकता है। –