1、用merge按列合并xts
merge()将一个或多个序列按列合并。适用于按固定日期来规范观测值。
merge(a, b, join = "right", fill = 9999)
3个关键参数:
... :用于合并的任意个的对象
Join :规定如何合并序列,例如inner或left方式。
Fill : 规定如何设置序列合并后出现的缺失值
2、用rbind按行合并xts
合并结果按时间升序排列
五、观测值的NA值处理
1、前一个或下个观测值结转法
取缺失值的前一个观测值来填补缺失值。可防止先窥偏差(look-ahead bias)
# 使用上个观测值
na.locf(x)
#设置fromLast = TRUE,可使用下个观测值填补空缺
na.locf(x, fromLast = TRUE)
2、使用 na.approx()插补缺值
na.approx()基于两点之间的简单线性插值,数据点使用索引值之间的距离来估算,估算值在时间上是线性的。
六、时间序列操作
1、偏移函数lag()
k是偏移的步长。在xts中,k为正,序列的观测值将向下(时间后方)偏移;k为负,观测值将向上偏移。Zoo与xts相反。
> a
[,1]
2016-01-01 1
2016-01-02 2
2016-01-03 3
> lag(a)
[,1]
2016-01-01 NA
2016-01-02 1
2016-01-03 2
> lag(a,k=-1)
[,1]
2016-01-01 2
2016-01-02 3
2016-01-03 NA
2、差分函数diff()
一个简单的差分例如: x(t) - x(t-k) 其中k是序列偏移的步长。高阶差分是对每个之前的差分计算结果的重复应用。
diff(xtsdata, lag = , differences = )
参数说明:
Lag:偏移数;
differences:差分的次序(例如:调用多少次 diff )。
# 下面两条指令的效果相同
diff(x, differences = 2)
diff(diff(x))
3、endpoints()函数,按时间间隔分割数据
endpoints(data,on=, k= )
该函数接收一个时间序列并返回每个时间区间的最后一个观测值的位置向量。返回值以0开始,以数据长度(总行数)结束。
参数on 支持各种时间周期, 包括"years", "quarters", "months","hours"和 "minutes"等。
参数K用于找到第k个周期。例如,设置on = "weeks", k = 2, 可取每两周的最后一天。注意最后一个返回值总是数据的长度,即便是与间隔周期不一致。
例如,下列代码显示某数据每年的最后一个观测值
endpoints(Air, on = "years")
[1] 0 12 24 36 48 60 72 84 96 108 120 132 144
4、用period.apply按时间分割数据,并运算
period.apply(x, INDEX, FUN, ...)
使用举例:
# 计算每周的端点
ep <- endpoints(temps, on = "weeks")
# 计算每周均值并显示结果
period.apply(temps, INDEX = ep, FUN = mean)
5、用 split-lapply-rbind分割数据并运算
#按周来划分数据,f参数是一个字符串,用于描述划分的间隔(例如:"months", "years")
data_weekly <- split(data, f = "weeks")
#创建一个每周均值的列表
temps_avg <- lapply(X = data_weekly, FUN = mean)
x_list_rbind <- do.call(rbind, temps_avg)
do.call(rbind, ...)
向rbind传送一个list,而不是一次传送一个对象。
6、单变量序列转换成OHLC数据(Open-High-Low-Close data)
基于常规窗口整合不同频次的序列可以使分析更容易。
to.period()函数格式如下,参数包括序列x, 表示周期的字符k等
to.period(x,
period = "months",
k = 1,
indexAt,
name=NULL,
OHLC = TRUE,
...)
使用举例:
usd_eur_weekly <- to.period(usd_eur, period = "weeks")
usd_eur_yearly <- to.period(usd_eur, period = "years", OHLC = FALSE)
7、转换成低频序列
to.period()也可将序列转换成低调整频次的数据,类似于二次抽样。
# 转换成季度OHLC格式
mkt_quarterly <- to.period(eq_mkt, period = "quart