R:如何在前一天改变证券交易所每日指数时间序列中的间隔(假期)';什么信息?
我使用R语言,处理来自不同国家的时间序列每日股票指数。为了比较不同的指数(如相关性、因果关系等),我需要所有序列具有相同的行数,但由于不同国家的不同节假日,每个序列中的行数会发生变化 我正在处理从yahoo finance提取的文件,格式为.csv,比如R:如何在前一天改变证券交易所每日指数时间序列中的间隔(假期)';什么信息?,r,date,time-series,stockquotes,gaps-in-data,R,Date,Time Series,Stockquotes,Gaps In Data,我使用R语言,处理来自不同国家的时间序列每日股票指数。为了比较不同的指数(如相关性、因果关系等),我需要所有序列具有相同的行数,但由于不同国家的不同节假日,每个序列中的行数会发生变化 我正在处理从yahoo finance提取的文件,格式为.csv,比如 > head(sp) > Date Open High Low Close Volume Adj.Close >1288 2010-01-04 1116.56 1133.87
> head(sp)
> Date Open High Low Close Volume Adj.Close
>1288 2010-01-04 1116.56 1133.87 1116.56 1132.99 3991400000 1132.99
>1287 2010-01-05 1132.66 1136.63 1129.66 1136.52 2491020000 1136.52
>1286 2010-01-06 1135.71 1139.19 1133.95 1137.14 4972660000 1137.14
我需要。。。例如,假设2010-01-07日是假日,在本例中,文件中的下一行(第1285行)是2010-01-08日:
> head(sp)
> Date Open High Low Close Volume Adj.Close
>1288 2010-01-04 1116.56 1133.87 1116.56 1132.99 3991400000 1132.99
>1287 2010-01-05 1132.66 1136.63 1129.66 1136.52 2491020000 1136.52
>1286 2010-01-06 1135.71 1139.19 1133.95 1137.14 4972660000 1137.14
>1285 2010-01-08 1140.52 1145.39 1136.22 1144.98 4389590000 1144.98
需要用previus日数据填补2010-01-07的空白,如:
> head(sp)
> Date Open High Low Close Volume Adj.Close
>1288 2010-01-04 1116.56 1133.87 1116.56 1132.99 3991400000 1132.99
>1287 2010-01-05 1132.66 1136.63 1129.66 1136.52 2491020000 1136.52
>1286 2010-01-06 1135.71 1139.19 1133.95 1137.14 4972660000 1137.14
>1285 2010-01-07 1135.71 1139.19 1133.95 1137.14 4972660000 1137.14
>1284 2010-01-08 1140.52 1145.39 1136.22 1144.98 4389590000 1144.98
我怎么能做到这一点
我的代码是(查看我尝试用于解决问题kkk的所有库)
很抱歉我的英语不好xts软件包在这里很有用:
DF <- read.table(text = " Date Open High Low Close Volume Adj.Close
1288 2010-01-04 1116.56 1133.87 1116.56 1132.99 3991400000 1132.99
1287 2010-01-05 1132.66 1136.63 1129.66 1136.52 2491020000 1136.52
1286 2010-01-06 1135.71 1139.19 1133.95 1137.14 4972660000 1137.14
1285 2010-01-08 1140.52 1145.39 1136.22 1144.98 4389590000 1144.98", header = TRUE)
DF$Date <- as.Date(DF$Date)
library(xts)
X <- as.xts(DF[,-1], order.by = DF$Date)
na.locf(merge(X, seq(min(DF$Date), max(DF$Date), by = 1)))
# Open High Low Close Volume Adj.Close
#2010-01-04 1116.56 1133.87 1116.56 1132.99 3991400000 1132.99
#2010-01-05 1132.66 1136.63 1129.66 1136.52 2491020000 1136.52
#2010-01-06 1135.71 1139.19 1133.95 1137.14 4972660000 1137.14
#2010-01-07 1135.71 1139.19 1133.95 1137.14 4972660000 1137.14
#2010-01-08 1140.52 1145.39 1136.22 1144.98 4389590000 1144.98
DF使用Read.zoo
读入,通过将零宽度动物园系列与所有日期合并,添加缺少的天数。最后使用na.locf
填写合并生成的na
值
Lines <- "Date,Open,High,Low,Close,Volume,Adj.Close
2010-01-04,1116.56,1133.87,1116.56,1132.99,3991400000,1132.99
2010-01-05,1132.66,1136.63,1129.66,1136.52,2491020000,1136.52
2010-01-06,1135.71,1139.19,1133.95,1137.14,4972660000,1137.14
2010-01-11,1140.52,1145.39,1136.22,1144.98,4389590000,1144.98"
library(zoo)
z <- read.zoo(text = Lines, header = TRUE, sep = ",")
zout <- na.locf( merge(z, zoo(, seq(start(z), end(z), by = "day"))) )
na.locf
行的另一种选择是将na.approx
与method=“constant”
一起使用:
na.approx(z, xout = seq(start(z), end(z), by = "day"), method = "constant")
给出同样的答案
添加到NA
out周末:
library(chron)
zout[is.weekend(time(zout)), ] <- NA
不喜欢quantmod
和xts
?好问题!你刚刚投了第一票!这种解决方案是否也适用于连续缺失天数的情况?例如,如果连续两天不见踪影,这也行吗?@TimBiegeleisen试试看。(是的,会的。)汉克斯很多,=)但像G.格罗森迪克一样。。。这段代码填补了周末的空白,我需要填补周一到周五之间没有数据的日子。在证券交易所的假期。非常感谢,=)但我仍然有一个问题,因为这种方法填补了空白,因为周末和我需要填补只是假期。。换句话说,周一到周五之间没有数据的天数。
> zout
Open High Low Close Volume Adj.Close
2010-01-04 1116.56 1133.87 1116.56 1132.99 3991400000 1132.99
2010-01-05 1132.66 1136.63 1129.66 1136.52 2491020000 1136.52
2010-01-06 1135.71 1139.19 1133.95 1137.14 4972660000 1137.14
2010-01-07 1135.71 1139.19 1133.95 1137.14 4972660000 1137.14
2010-01-08 1135.71 1139.19 1133.95 1137.14 4972660000 1137.14
2010-01-09 1135.71 1139.19 1133.95 1137.14 4972660000 1137.14
2010-01-10 1135.71 1139.19 1133.95 1137.14 4972660000 1137.14
2010-01-11 1140.52 1145.39 1136.22 1144.98 4389590000 1144.98
na.approx(z, xout = seq(start(z), end(z), by = "day"), method = "constant")
library(chron)
zout[is.weekend(time(zout)), ] <- NA
library(chron)
zout[!is.weekend(time(zout))]