【问题标题】:creating quarterly `xts` time-series object for use with plot.xts创建季度“xts”时间序列对象以与 plot.xts 一起使用
【发布时间】:2017-04-11 09:51:18
【问题描述】:

我正在努力将一些数据转换为季度时间xts 系列对象。首先我的数据不是一个适当的基于时间的对象,现在as.yearqtr 的行为我无法理解。

我希望对象 df 进行转换,以便我可以使用我的最终目标 plot.xts 绘制它,但我被卡住了,如下所示。

df <- structure(list(yrQ = structure(1:7, .Label = c("2016-1", "2016-2", 
"2016-3", "2016-4", "2016-5", "2016-6", "2016-7"), class = "factor"), 
    a = c(4.14, 2.83, 3.71, 4.15, 4.63, 4.91, 5.31), b = c(4.25, 
    3.5, 3.5, 3.5, 3.5, 3.5, 5)), .Names = c("yrQ", "a", "b"
), row.names = c(NA, 7L), class = "data.frame")
df
#      yrQ    a    b
# 1 2016-1 4.14 4.25
# 2 2016-2 2.83 3.21
# 3 2016-3 3.71 3.21
# 4 2016-4 4.15 3.21
# 5 2016-5 4.63 3.21
# 6 2016-6 4.91 3.21
# 7 2016-7 5.31 5.00

# install.packages(c("xts"), dependencies = TRUE)
library(xts)
xts(df, order.by = df[,1])
# Error in xts(df, order.by = df[, 1]) : 
#   order.by requires an appropriate time-based object

df$yrQ <- as.yearqtr(df$yrQ)
df    
#       yrQ    a    b
# 1 2016 Q1 4.14 4.25
# 2 2016 Q2 2.83 3.21
# 3 2016 Q3 3.71 3.21
# 4 2016 Q4 4.15 3.21
# 5  NA QNA 4.63 3.21
# 6  NA QNA 4.91 3.21
# 7  NA QNA 5.31 5.00

【问题讨论】:

  • yrQ 列显然不表示季度,因为 2016 年没有 7 个季度。您的原始数据是月度数据吗?您希望如何将其汇总为季度(总和、平均值、OHLC...)?
  • @ChrisHaug,我真的很抱歉。我应该在睡觉后这样做(@R.S. 也礼貌地指出了这种精神失误)我会尽快更新我的问题。谢谢!

标签: r time-series xts as.yearqtr


【解决方案1】:

您在 df 中拥有的数据似乎是月度数据,因为它超过 4 点。

在这种情况下,我想要走的路是使用as.yearmon,然后从那里到to.quarterly。不过,如果没有 OHLC 图表,它的绘图效果并不好,所以我也查找了另一个选项。看看你是怎么想的。

这是我的尝试:

require(xts)
df <- structure(list(yrQ = structure(1:7, .Label = c("2016-1", "2016-2", 
"2016-3", "2016-4", "2016-5", "2016-6", "2016-7"), class = "factor"), 
    a = c(4.14, 2.83, 3.71, 4.15, 4.63, 4.91, 5.31), b = c(4.25, 
    3.5, 3.5, 3.5, 3.5, 3.5, 5)), .Names = c("yrQ", "a", "b"
), row.names = c(NA, 7L), class = "data.frame")
df


# using yearmon to create xts
myxts<- xts(df[,-1], order.by = as.yearmon(as.character(df[,1])  ))

myxts

#using to.quarterly .. cannot be used simultaneously with both columns
#guess that would need apply and Reduce

myxtsQ<- to.quarterly(myxts$a)
myxtsQ
plot(myxtsQ) 
# require(quantmod)
# quantmod::chartSeries(myxtsQ)



# One option seems to be indexing 
# though it seems XTS does not support recycling of boolean indices
#so we need to create a list of indices

indx<- rep( c(T,F,F), ceiling(nrow(myxts)/3 ))
indx
myxtsQ<- myxts[indx,]
plot.xts(myxtsQ)

【讨论】:

  • 感谢您的精彩回答!我想我昨晚睡得太晚了。正如您和@ChrisHaug 指出的那样,yrQ 显然不是指季度,而是指月份。尽管我有心理失误,但您的回答非常清楚且写得很好。谢谢!
  • 很高兴它有帮助。顺便说一句,我个人很喜欢那个 quantmod OHLC 风格的图表。
猜你喜欢
  • 1970-01-01
  • 2012-03-11
  • 2019-09-02
  • 1970-01-01
  • 2016-04-18
  • 2023-04-04
  • 1970-01-01
  • 1970-01-01
  • 2011-10-29
相关资源
最近更新 更多