【发布时间】:2017-11-25 16:17:51
【问题描述】:
下午好!现在我想自动处理财务数据,但我遇到了如何从 data.frame 中选择所需数据的问题。
比如我有以下headof data.frame:
period bid_open bid_high bid_low bid_close ask_open ask_high
1 2015-01-02 00:00:00 1.20860 1.20880 1.20860 1.20870 1.20890 1.20890
2 2015-01-02 00:01:00 1.20870 1.20880 1.20865 1.20865 1.20880 1.20890
3 2015-01-02 00:02:00 1.20865 1.20880 1.20865 1.20875 1.20875 1.20885
4 2015-01-02 00:03:00 1.20875 1.20885 1.20875 1.20885 1.20885 1.20900
5 2015-01-02 00:04:00 1.20885 1.20885 1.20880 1.20880 1.20895 1.20895
6 2015-01-02 00:05:00 1.20880 1.20885 1.20880 1.20880 1.20890 1.20895
这里主要关注第一列period——数据可以有时间频率1m(如下)、1s、1h、1d。我想编写包含参数frequency 的函数。例如,如果 frequency=2h,函数输出是新的 data.frame,其中包含 2 小时前的观察(股票价格):
2015-01-02 00:00:00
2015-01-02 02:00:00
2015-01-02 04:00:00
....
如果频率为15s (f.e.),则 R 必须输出初始数据帧,因为初始数据的频率为 1m。
但我有几个问题要完成这项任务。你能帮帮我吗?
我的逻辑是:
首先,找到初始频率:
time=data[,1]
freq=as.numeric(difftime(time[2], time[1]))
但问题是 R 只显示数字(在本例中为 freq=1),我不知道它是 1m 还是 1h 还是 1d。如何纠正?
- 其次,f.e.我将获得
freq=5m,但我的数据频率是1m,所以我需要更正我的表并只保留1st,6th,11th...行。我怎样才能做到? 谢谢!
【问题讨论】:
-
对于您的输出,如果您选择频率 = 5 分钟,您想要获得平均值(即输出将是该时期的平均出价高点等)还是您想要确切的值在那一刻?两者都是可行的,但根据您的输入数据,您可能在某些瞬间没有值。
-
不,如果频率=5分钟,但我的数据每分钟都有观察,我想得到新的数据框,旧数据将是:data[1,],data[6 ,],data[11,] 等,因此 step = 5(不使用 2-5 号观测值)。
-
好的。对于初始时间步(频率),您可以使用
difftime(time[1], time[2], units = "mins"),这样您就知道单位是分钟,对于其余的,lubridate包应该会有所帮助。