सबसेटिंग R समय श्रृंखला वैक्टर


25

मेरे पास एक समय श्रृंखला है और मैं इसे एक समय श्रृंखला के रूप में रखते हुए, प्रारंभ, अंत और आवृत्ति को संरक्षित करते हुए इसे कम करना चाहता हूं।

उदाहरण के लिए, मान लें कि मेरे पास एक समय श्रृंखला है:

> qs <- ts(101:110, start=c(2009, 2), frequency=4)
> qs
     Qtr1 Qtr2 Qtr3 Qtr4
2009       101  102  103
2010  104  105  106  107
2011  108  109  110     

अब मैं इसे सब्मिट करूंगा:

> qs[time(qs) >= 2010 & time(qs) < 2011]
[1] 104 105 106 107

ध्यान दें कि मुझे सही परिणाम मिले, लेकिन मैंने समय श्रृंखला (अर्थात् प्रारंभ, अंत, आवृत्ति) से "रैपिंग" खो दिया।

मैं इसके लिए एक फंक्शन की तलाश में हूं। क्या टाइम सीरीज़ को सब्मिट नहीं करना एक सामान्य परिदृश्य है? चूंकि मुझे अभी तक एक नहीं मिला है, यहां एक फ़ंक्शन है जो मैंने लिखा है:

subset.ts <- function(data, start, end) {
  ks <- which(time(data) >= start & time(data) < end)
  vec <- data[ks]
  ts(vec, start=start(data) + c(0, ks[1] - 1), frequency=frequency(data))
}

मैं सुधार या क्लीनर तरीके के बारे में सुनना चाहूंगा। विशेष रूप से, मुझे शुरू-अंत में हार्ड-कोडिंग करने का तरीका पसंद नहीं है। मैं इसके बजाय उपयोगकर्ता को एक मनमाना बूलियन स्थिति निर्दिष्ट करने देता हूं।

जवाबों:


34

windowफ़ंक्शन का उपयोग करें :

> window(qs, 2010, c(2010, 4))
     Qtr1 Qtr2 Qtr3 Qtr4
2010  104  105  106  107

2
यह भी ध्यान दें कि विंडो (qs, 2010, c (2010, 4)) <- 3 तदनुसार qs को बदल देगा।

6

साथ ही उपयोगी है, यदि आप कई समय श्रृंखला का संयोजन कर रहे हैं और windowउन्हें मिलान करने के लिए हर एक के पास नहीं होना चाहते हैं , ts.unionऔर ts.intersect

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.