关于
xts 是一个 R 包,它提供了 zoo 类的扩展。zoo 的优势在于其使用简单(与基础 R 函数非常相似)以及整体灵活性(你可以使用任何东西作为索引)。xts 扩展的动机是通过施加合理的限制来提高性能,同时提供一个真正基于时间的结构。
企业版 xts
作为 Tidelift 订阅的一部分提供。
xts
和其他数千个包的维护者正在与 Tidelift 合作,为您用于构建应用程序的开源依赖项提供商业支持和维护。节省时间,减少风险,改善代码健康,同时向您使用的确切依赖项的维护者付费。了解更多。
支持 xts 开发
如果您有兴趣支持 xts 的持续开发和维护,请考虑成为赞助者。
安装
当前版本可在 CRAN 上获得,您可以通过以下方式安装:
install.packages("xts")
要安装开发版本,您需要克隆存储库并从源代码构建,或运行以下命令之一:
# 轻量级
remotes::install_github("joshuaulrich/xts")
# 或
devtools::install_github("joshuaulrich/xts")
您需要工具来编译 C、C++ 和 Fortran 代码。请参阅 R 安装和管理手册 中针对您操作系统的相关附录:
- Windows
- MacOS(R for Mac OS X 开发者页面 也可能有帮助)
- 类 Unix 系统
入门
您可以使用 xts()
和 as.xts()
创建 xts 对象。
请注意,as.xts()
目前期望日期/时间在矩阵和数据框对象的行名中,或在向量的名称中。您也可以使用 dateFormat
参数来控制名称是否应转换为 Date
或 POSIXct
。详情请参见 help(as.xts.methods)
。
n <- 10
series <- rnorm(n)
# POSIXct(日期/时间)索引
datetimes <- seq(as.POSIXct("2017-03-27"), length.out = n, by = "days")
library(xts)
x <- xts(series, datetimes)
除了可以像子集矩阵和 zoo 对象一样对 xts 对象进行子集操作外,您还可以使用符合 ISO-8601 标准 的字符串进行子集操作,这是国际公认的表示日期和时间的方式。使用上一个代码块中的数据,这里有一些例子:
# 2017年3月
x["2017-03"]
# [,1]
# 2017-03-27 0.25155453
# 2017-03-28 -0.09379529
# 2017-03-29 0.44600926
# 2017-03-30 0.18095782
# 2017-03-31 -1.45539421
# 3月30日至4月2日
x["2017-03-30/2017-04-02"]
# [,1]
# 2017-03-30 0.1809578
# 2017-03-31 -1.4553942
# 2017-04-01 -0.4012951
# 2017-04-02 -0.5331497
# 序列开始到4月1日
x["/2017-04-01"]
# [,1]
# 2017-03-27 0.25155453
# 2017-03-28 -0.09379529
# 2017-03-29 0.44600926
# 2017-03-30 0.18095782
# 2017-03-31 -1.45539421
# 2017-04-01 -0.40129513
您可以使用 to.period()
函数将单变量序列或开盘-最高-最低-收盘(OHLC)数据聚合成较低频率的 OHLC 序列。还有一些便捷函数用于某些频率(例如 to.minutes()
、to.daily()
、to.yearly()
等)。
data(sample_matrix)
x <- as.xts(sample_matrix)
to.period(x, "months")
# x.Open x.High x.Low x.Close
# 2007-01-31 50.03978 50.77336 49.76308 50.22578
# 2007-02-28 50.22448 51.32342 50.19101 50.77091
# 2007-03-31 50.81620 50.81620 48.23648 48.97490
# 2007-04-30 48.94407 50.33781 48.80962 49.33974
# 2007-05-31 49.34572 49.69097 47.51796 47.73780
# 2007-06-30 47.74432 47.94127 47.09144 47.76719
to.monthly(x) # 结果具有'yearmon'索引
# x.Open x.High x.Low x.Close
# 2007年1月 50.03978 50.77336 49.76308 50.22578
# 2007年2月 50.22448 51.32342 50.19101 50.77091
# 2007年3月 50.81620 50.81620 48.23648 48.97490
# 2007年4月 48.94407 50.33781 48.80962 49.33974
# 2007年5月 49.34572 49.69097 47.51796 47.73780
# 2007年6月 47.74432 47.94127 47.09144 47.76719
period.apply()函数允许您对非重叠区间应用自定义函数。您可以使用类似于endpoints()输出的向量来指定区间。与to.period()类似,也有一些便捷函数,如apply.daily()、apply.quarterly()等。
# 每列的月平均值
period.apply(x, endpoints(x, "months"), colMeans)
# Open High Low Close
# 2007-01-31 50.21140 50.31528 50.12072 50.22791
# 2007-02-28 50.78427 50.88091 50.69639 50.79533
# 2007-03-31 49.53185 49.61232 49.40435 49.48246
# 2007-04-30 49.62687 49.71287 49.53189 49.62978
# 2007-05-31 48.31942 48.41694 48.18960 48.26699
# 2007-06-30 47.47717 47.57592 47.38255 47.46899
# Open High Low Close
# 2007-01-31 50.21140 50.31528 50.12072 50.22791
# 2007-02-28 50.78427 50.88091 50.69639 50.79533
# 2007-03-31 49.53185 49.61232 49.40435 49.48246
# 2007-04-30 49.62687 49.71287 49.53189 49.62978
# 2007-05-31 48.31942 48.41694 48.18960 48.26699
# 2007-06-30 47.47717 47.57592 47.38255 47.46899
有问题吗?
在Stack Overflow上提出你的问题或在R-SIG-Finance邮件列表上提问(必须订阅才能发帖)。
想要实践经验吗?
- DataCamp上的导入和管理金融数据课程
- DataCamp上的使用xts和zoo操作时间序列课程
贡献
请参阅贡献指南。
另请参阅
- quantmod:量化金融建模框架
- TTR:技术交易规则函数
- zoo:用于规则和不规则时间序列的类
作者
Jeffrey Ryan,Joshua Ulrich