2013-03-16 27 views
1

我有一个数据帧的对象,看起来方式如下:data.frame到时间序列对象

Date  dax_data.csv nikkei_data.csv spx_data.csv 
2013-03-15 NA    NA    1560.70 
2013-03-14 NA    NA    1563.23 
2013-03-13 NA    NA    1554.52 
2013-03-12 NA    NA    1552.48 
2013-03-11 NA    NA    1556.22 
2013-03-08 8020.36   12283.62  1551.18 

... 

1984-01-04 4533.21   9927.00   900.42 
1984-01-05 NA    9947.00   NA 
1984-01-06 NA    9961.00   NA 

我想要做的步骤如下:

  • 减少数据帧只盖所有数据集都有值的日期范围。在这个例子中,从1984-01-042013-03-08(不能被硬编码,需要是动态的,并且所有的NAs之间需要保留)。

  • 数据的频率需要为每周一次,第一个值应该是数据帧中最早的值。即在这个例子中是1984-01-04

  • 数据框对象需要转换为timeSeries对象。

在此先感谢!

回答

2

你不解释你的数据将如何减少到每周频率。我的意思是你从这个星期获得任何价值?或者你采取的数值的意思?...

在这里一个选项使用xts包,方便这个操作特别是金融时间序列。

library(xts) 
dat.ts <- xts(dat[,-1],as.POSIXct(dat$Date)) 
dat.ts[endpoints(dat.ts,'weeks')] 

      dax_data.csv nikkei_data.csv spx_data.csv 
1984-01-06   NA   9961   NA 
2013-03-11   NA    NA  1556.22 
2013-03-15   NA    NA  1560.70 
+0

感谢您的回答。 如果没有人提出任何其他建议,我打算从这个星期拿出任何价值,我打算这样做:t + 5 – Spurious 2013-03-16 11:48:48

+0

@疯狂我不明白你的观点。 t + 5是什么意思? – agstudy 2013-03-16 11:53:23

+0

基本上从第一次约会起,总是加5天。 你的脚本没有工作,我认为。输出不被修整,仍然有每日值。 – Spurious 2013-03-16 11:56:33

1

我们使用read.zoo在数据读取和使用na.trim开头和结尾修剪所有NA行。 (请注意,read.zoo也可以“读取”数据帧和文件。)

然后我们汇总nextfri(在zoo Quick Reference vignette中定义)的所有具有相同值的行。 nextfri需要一个日期向量,每个组件返回下一个星期五(或者如果已经是星期五,则返回相同的日期)。实际的汇总函数为tail1(每周最后一行),但我们可以用其他合理的汇总函数替代,如mean。 (请参阅?aggregate.zoo)。

最后,我们将"zoo"时间序列转换为"timeSeries"时间序列。根据你打算下一步做什么,你可能不需要最后一步。

Lines <- " 
Date  dax_data.csv nikkei_data.csv spx_data.csv 
2013-03-15 NA    NA    1560.70 
2013-03-14 NA    NA    1563.23 
2013-03-13 NA    NA    1554.52 
2013-03-12 NA    NA    1552.48 
2013-03-11 NA    NA    1556.22 
2013-03-08 8020.36   12283.62  1551.18 
1984-01-04 4533.21   9927.00   900.42 
1984-01-05 NA    9947.00   NA 
1984-01-06 NA    9961.00   NA 
" 

library(zoo) 

z.raw <- read.zoo(text = Lines, header = TRUE) 
z <- na.trim(z, is.na = "all") 

nextfri <- function(x) 7 * ceiling(as.numeric(x-5+4)/7) + as.Date(5-4) 
tail1 <- function(x) tail(x, 1) 
z.wk <- aggregate(z, nextfri, tail1) 

library(timeSeries) 
as.timeSeries(z.wk)