Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R:如何在前一天改变证券交易所每日指数时间序列中的间隔(假期)';什么信息?_R_Date_Time Series_Stockquotes_Gaps In Data - Fatal编程技术网

R:如何在前一天改变证券交易所每日指数时间序列中的间隔(假期)';什么信息?

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

我使用R语言,处理来自不同国家的时间序列每日股票指数。为了比较不同的指数(如相关性、因果关系等),我需要所有序列具有相同的行数,但由于不同国家的不同节假日,每个序列中的行数会发生变化

我正在处理从yahoo finance提取的文件,格式为.csv,比如

> 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))]