การจัดกลุ่มเวกเตอร์อนุกรมเวลา 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

โปรดสังเกตว่าฉันได้ผลลัพธ์ที่ถูกต้อง แต่ฉันสูญเสีย "wrappings" จากอนุกรมเวลา (เช่นเริ่มต้นสิ้นสุดความถี่)

ฉันกำลังมองหาฟังก์ชั่นสำหรับสิ่งนี้ การไม่แบ่งเวลาอนุกรมเป็นสถานการณ์ทั่วไปใช่หรือไม่ เนื่องจากฉันยังไม่พบหนึ่งต่อไปนี้เป็นฟังก์ชันที่ฉันเขียน:

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 ตามลำดับ
mpiktas

6

ยังมีประโยชน์ถ้าคุณกำลังรวมอนุกรมเวลาหลายและไม่ต้องการที่จะต้องมีเพื่อwindowทุกคนจะได้รับพวกเขาเพื่อให้ตรงกับและts.unionts.intersect

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.