วิธีการสุ่มตัวอย่างอนุกรมเวลา XTS ใน R ได้อย่างไร


9

ฉันมีXTSอนุกรมเวลาที่เว้นระยะผิดปกติ(มีPOSIXctค่าเป็นประเภทดัชนี)

ฉันจะสร้างซีรีย์เวลาใหม่ที่สุ่มตัวอย่างในช่วงเวลา 10 นาทีได้อย่างไร แต่แต่ละช่วงเวลาตัวอย่างจะถูกจัดให้สอดคล้องกับรอบเวลา (13:00:00, 13:10:00, 13:20:00, ... ) . หากช่วงเวลาการสุ่มตัวอย่างไม่ตรงกับค่าซีรี่ส์ดั้งเดิมฉันต้องการใช้ช่วงเวลาก่อนหน้า


คุณช่วยยกตัวอย่างได้ไหม
Joshua Ulrich

2
หากเคยมีรายการคำถามที่พบบ่อยสำหรับ xts สิ่งนี้จะได้คะแนนสูง โปรดดูรอบ ๆ ที่นี่ค้นหา[r] xtsและตรวจสอบจดหมายเหตุ r-sig-Finance
Dirk Eddelbuettel

คำตอบ:


5
library(xts)
?endpoints

ตัวอย่างเช่น

tmp=zoo(rnorm(1000), as.POSIXct("2010-02-1")+(1:1000)*60)
tmp[endpoints(tmp, "minutes", 20)]

เพื่อสุ่มตัวอย่างทุก ๆ 20 นาที นอกจากนี้คุณยังอาจต้องการตรวจสอบto.minutes, to.dailyฯลฯ


มีปัญหาเพียงเล็กน้อย - ถ้าฉันมี ... , 14:59, 15:00, ... มันจะดึงข้อมูล 14:59 และไม่ใช่ 15:00 ตามที่ฉันต้องการ มีวิธีทำให้กลับ 15:00 หรือไม่? ฉันพยายามสิ่งที่ชอบ"seconds", 3601แต่มันไม่ทำงาน
Meh

เนื่องจากการประทับเวลาไม่สม่ำเสมอเราสามารถรับประกันได้เฉพาะ dt ระหว่างจุดข้อมูล จุดที่แท้จริงขึ้นอยู่กับจุดเริ่มต้นของซีรีส์ หากคุณกำหนดจุดเริ่มต้นของคุณเป็นเวลาหนึ่งชั่วโมงมันจะทำงานตามที่คุณต้องการ ... (สมมติว่าคุณมีคะแนนทุก ๆ N นาที)
Dr G

นี่คือสิ่งที่ฉันไม่ต้องการ - ขึ้นอยู่กับจุดแรก
Meh

2

ฉันยังไม่แน่ใจว่าสิ่งที่คุณกำลังพยายามที่จะทำและผมยังคิดว่าตัวอย่างจะช่วย align.timeแต่ฉันคิดว่าฉันเดาว่าคุณอาจจะสนใจใน

# Compare this:
tmp[endpoints(tmp, "minutes", 20)]
# with this:
align.time( tmp[endpoints(tmp, "minutes", 20)], n=60*20 )

พิจารณาอนุกรมเวลาใดก็ได้ - อุณหภูมิภายนอก ฉันต้องการที่จะรู้ว่าสิ่งที่อุณหภูมิเวลา 11.00 นาฬิกาผนังเวลา 12:00 นาฬิกาแขวน, .... ฉันจะตรวจสอบตัวอย่างของคุณในภายหลังเพื่อดูว่ามันทำอย่างนี้
Meh

เท่าที่ฉันสามารถบอกได้แอปพลิเคชันของ align.time หลังจากใช้จุดปลายนี้คือสิ่งที่ Adal ต้องการ (นอกเหนือจากที่เขากล่าวถึงการใช้ "อันก่อนหน้านี้" ในคำถามเดิม) อย่างไรก็ตามมันเป็นสิ่งที่ฉันต้องการขอบคุณโจชัว
ราหุลซาวานี

มีเวอร์ชันของการจัดเรียงเวลา แต่เพื่อปัดเศษขึ้นหรือไม่ มันก็ทำสิ่งที่ฉันต้องการ แต่สำหรับสิ่งนั้น (BTW ฉันมีวิธีที่หยาบคาย: ถ้า a1 เป็นวัตถุ XTS ของฉันและฉันต้องการที่จะปัดเศษเป็นช่วงเวลานาทีindex(a1)=index(a1)-60;align.time(a1,60))
Darren Cook

1
@DarrenCook: ไม่มีรุ่นalign.timeที่ทำอย่างนั้น ดูเหมือนว่าเป็นความคิดที่ไม่ดีที่จะจัดแนวการสังเกตให้ตรงกับเวลาก่อนที่จะเกิดขึ้น
Joshua Ulrich

2
@JoshuaUlrich ตัวอย่างหนึ่งคือการแปลงเห็บการเงินในบาร์ 08:00 น. แสดงนาทีจาก 08:00 น. ถึง 08:00:59 น. 08:00 น. เป็นชั่วโมงบาร์แทนเวลา 08:00 น. ถึง 08:59:59 น. (มันสอดคล้องกับวิธีการทำงานของบาร์รายวันที่ 2011-11-25 แสดงการซื้อขายใน 2011-11-25 ไม่ใช่ใน 2011-11-24) ฉันคิดว่านี่เป็นพฤติกรรมเดียวกับที่ OP ต้องการ
Darren Cook

1

หากaเป็นวัตถุ xts ที่มีรายการถึงความละเอียดที่สองสิ่งนี้จะกระทบทุกวินาที: index (a) = trunc (index (a), "mins")

นอกจากนี้คุณยังสามารถใช้วิธีนี้เพื่อปัดความละเอียดเป็น "ชั่วโมง" ได้เช่นกัน แต่ไม่รองรับ 10 นาที เพื่อที่คุณจะต้องทำสิ่งนี้:

x=as.POSIXlt(index(a))
x$sec[]=0;x$min[]=x$min[]%/%10
index(a)=x

หรือa=align.time.down(a,600)ที่คุณกำหนดไว้:

align.time.down=function(x,n){index(x)=index(x)-n;align.time(x,n)}

(ฉันเลือกตัวเลือกสุดท้ายในสคริปต์ของฉัน)

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