seq.default中的aggregate()错误

时间:2014-02-27 18:04:39

标签: r

我是R的新手。我试图在5分钟的时间内汇总数据。我想要打开,关闭,高,低和总大小。我添加了高频率包,以及 zoo 包和 xts 包。 我正在从这个链接创建包的人那里学习教程(第3.2节): http://highfrequency.herokuapp.com/

这是我得到的错误:

Error in seq.default(start(ts), end(ts), by = tby) : 
'from' must be of length 1

以下是我正在使用的数据示例。该文件要大得多,但我不知道如何将其附加到我的帖子中:

Date,Time,Price,Size
02/18/2014,05:06:13,49.6,200
02/18/2014,05:06:13,49.6,200
02/18/2014,05:06:13,49.6,200
02/18/2014,05:06:14,49.6,200
02/18/2014,05:06:14,49.6,193
02/18/2014,05:44:41,49.62,100
02/18/2014,06:26:36,49.52,100
02/18/2014,06:26:36,49.52,500
02/18/2014,07:09:29,49.6,100
02/18/2014,07:56:40,49.56,300
02/18/2014,07:56:40,49.55,400
02/18/2014,07:56:41,49.54,200
02/18/2014,07:56:43,49.55,100
02/18/2014,07:56:43,49.55,100
02/18/2014,07:56:50,49.55,100
02/18/2014,07:57:12,49.53,100
02/18/2014,07:57:12,49.51,2200
02/18/2014,07:57:12,49.51,100
02/18/2014,07:57:12,49.5,200

这是我的代码:

library(highfrequency)
data1<-read.table("C_0.txt",sep=",",header=T,stringsAsFactors=F)
ts=data1$Price
tsagg5min=aggregatets(ts,on="minutes",k=5)

您是否有关于如何通过非常大的数据集实现目标的建议? 我运行Windows 8 64位机器。

谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

您可以使用splitcutstrptime将数据剪切为5分钟。假设dat是您的数据,

> x <- split(dat, cut(strptime(dat$Time, format="%R"),"5 mins"))
> x
$`2014-02-27 05:06:00`
        Date     Time Price Size
1 02/18/2014 05:06:13  49.6  200
2 02/18/2014 05:06:13  49.6  200
3 02/18/2014 05:06:13  49.6  200
4 02/18/2014 05:06:14  49.6  200
5 02/18/2014 05:06:14  49.6  193

...
...
...

$`2014-02-27 07:56:00`
         Date     Time Price Size
10 02/18/2014 07:56:40 49.56  300
11 02/18/2014 07:56:40 49.55  400
12 02/18/2014 07:56:41 49.54  200
13 02/18/2014 07:56:43 49.55  100
14 02/18/2014 07:56:43 49.55  100
15 02/18/2014 07:56:50 49.55  100
16 02/18/2014 07:57:12 49.53  100
17 02/18/2014 07:57:12 49.51 2200
18 02/18/2014 07:57:12 49.51  100
19 02/18/2014 07:57:12 49.50  200

删除空白时间块

x <- x[sapply(x, dim)[1,] != 0]

获得高Price

> sapply(x, function(y) max(y$Price))
2014-02-27 05:06:00 2014-02-27 05:41:00 2014-02-27 06:26:00 2014-02-27 07:06:00 
              49.60               49.62               49.52               49.60 
2014-02-27 07:56:00 
              49.56 

获得低Price

> sapply(x, function(y) min(y$Price))
2014-02-27 05:06:00 2014-02-27 05:41:00 2014-02-27 06:26:00 2014-02-27 07:06:00 
              49.60               49.62               49.52               49.60 
2014-02-27 07:56:00 
              49.50 

获取总Size

> sapply(x, function(y) sum(y$Size))
2014-02-27 05:06:00 2014-02-27 05:41:00 2014-02-27 06:26:00 2014-02-27 07:06:00 
                993                 100                 600                 100 
2014-02-27 07:56:00 
               3800