本文主要是介绍《R的极客理想—工具篇》—— 2.1 R语言时间序列基础库zoo,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
本节书摘来自华章出版社《R的极客理想—工具篇》一 书中的第2章,第2.1节,作者:张丹,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
2.1 R语言时间序列基础库zoo
问题
R语言怎么处理时间序列数据?
引言
时间序列分析是一种动态数据处理的统计方法,通过对时间序列数据的分析,我们可以感觉到世界正改变着什么!R语言作为统计分析的利器,对时间序列处理有着强大的支持。在R语言中,单独为时间序列数据定义了一种数据类型zoo,zoo是时间序列的基础,也是股票分析的基础。本节将介绍zoo库在R语言中的结构和使用。
2.1.1 zoo包介绍
zoo是一个R语言类库,zoo类库中定义了一个名为zoo的S3类型对象,用于描述规则的和不规则的有序的时间序列数据。zoo对象是一个独立的对象,包括索引、日期、时间,只依赖于基础的R环境。zooreg对象继承了zoo对象,只能用于规则的时间序列数据。R语言中很多其他的程序包,都是以zoo和zooreg作为时间序列数据的基础的!zoo包的API主要有6类,下面一一介绍。
(1)基础对象
zoo: 有序的时间序列对象。
zooreg: 规则的时间序列对象,继承zoo对象。与zoo相比,不同之处在于zooreg要求数据是连续的。
(2)类型转换
as.zoo: 把一个对象转型为zoo类型。
plot.zoo: 为plot函数提供zoo的接口。
xyplot.zoo: 为lattice的xyplot函数提供zoo的接口。
ggplot2.zoo: 为ggplot2包提供zoo的接口。
(3)数据操作
coredata: 查看或编辑zoo的数据部分。
index: 查看或编辑zoo的索引部分。
window.zoo: 按时间过滤数据。
merge.zoo: 合并多个zoo对象。
read.zoo: 从文件读写zoo序列。
aggregate.zoo: 计算zoo数据。
rollapply: 对zoo数据的滚动处理。
rollmean: 对zoo数据的滚动计算均值。
(4)NA值处理
na.fill: NA值的填充。
na.locf: 替换NA值。
na.aggregate: 计算统计值替换NA值。
na.approx: 计算插值替换NA值。
na.StructTS: 计算季节Kalman滤波替换NA值。
na.trim: 过滤有NA的记录。
(5)辅助工具
is.regular: 检查是否是规则的序列。
lag.zoo: 计算步长和差分。
MATCH: 取交集。
ORDER: 值排序,输出索引。
(6)显示控制
yearqtr: 以年季度显示时间。
yearmon: 以年月显示时间。
xblocks: 作图沿x轴分割图形。
make.par.list: 用于给plot.zoo 和 xyplot.zoo 数据格式转换。
2.1.2 zoo安装
本节使用的系统环境是:
Win7 64bit
R: 3.0.1 x86_64-w64-mingw32/x64 b4bit
注 zoo同时支持Windows 7环境和Linux环境。
zoo包的安装过程如下:
~ R # 启动R程序
> install.packages("zoo") # 安装zoo包
> library(zoo) # 加载zoo包
2.1.3 zoo包的使用
- zoo对象
zoo对象包括两部分,即数据部分和索引部分。首先是函数定义:
zoo(x = NULL, order.by = index(x), frequency = NULL)
其中x是数据部分,允许类型为向量、矩阵、因子;order.by是索引部分,字段唯一性要求,用于排序;frequency是每个时间单元显示的数量。
以下代码构建一个zoo对象,以时间为索引,产生的结果是图2-1。特别要注意的一点是,zoo对象可以接受不连续的时间序列数据。
> x.Date <- as.Date("2003-02-01") + c(1, 3, 7, 9, 14) – 1 # 定义一个不连续的日期的向量
> x.Date
[1] "2003-02-01" "2003-02-03" "2003-02-07" "2003-02-09" "2003-02-14"
> class(x.Date)
[1] "Date"> x <- zoo(rnorm(5), x.Date) # 定义不连续的zoo对象
> x
2003-02-01 2003-02-03 2003-02-07 2003-02-09 2003-02-14
0.01964254 0.03122887 0.64721059 1.47397924 1.29109889
> class(x)
[1] "zoo"> plot(x) # 画图显示
接下来,我们以数字为索引创建多组时间序列。用如下代码,生成一个有12个元素的4行3列的矩阵,以数字0:10为索引,创建一个zoo类型对象y,并以图形输出y,产生的结果如图2-2所示。
> y <- zoo(matrix(1:12, 4, 3),0:10)
> y
0 1 5 9
1 2 6 10
2 3 7 11
3 4 8 12
4 1 5 9
5 2 6 10
6 3 7 11
7 4 8 12
8 1 5 9
9 2 6 10
10 3 7 11> plot(y) # 矩阵的每一列为一组时间序列图
- zooreg对象
首先是函数定义:
zooreg(data, start = 1, end = numeric(), frequency = 1,
deltat = 1, ts.eps = getOption("ts.eps"), order.by = NULL)
下面是参数说明。
data: 数据部分,允许类型为向量、矩阵、因子。
start: 时间部分,开始时间。
end: 时间部分,结束时间。
frequency: 每个时间单元显示的数量。
deltat: 连续观测的采样周期,不能与frequency同时出现,例如,取每月的数据,为1/12。
ts.e
这篇关于《R的极客理想—工具篇》—— 2.1 R语言时间序列基础库zoo的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!