【发布时间】:2016-01-14 14:41:21
【问题描述】:
首先抱歉,如果我已经在其他地方找到了答案,但我找不到答案。我的问题可能是由于我搜索信息的方式,所以我决定使用 StackOverflow,这样我就可以通过示例来展示我的问题。
我有五分钟的 OHLC 数据 DIA_5.csv,然后我添加了一个 DayOfYear 列来使用 Lubridate;
library(lubridate)
DIA_5[,6]<- yday(DIA_5[,1])
看起来像这样;
Date Open High Low Close DOY
1 2015-09-21 09:30:00 164.6700 164.7100 164.3700 164.5300 264
2 2015-09-21 09:35:00 164.5300 164.9000 164.5300 164.6400 264
3 2015-09-21 09:40:00 164.6600 164.8900 164.6000 164.8900 264
4 2015-09-21 09:45:00 164.9100 165.0900 164.9100 164.9736 264
5 2015-09-21 09:50:00 164.9399 165.0980 164.8200 164.8200 264
我想要做的是创建一个新的 d$f,第一列从一年中的个别日期开始,然后我将通过使用日期从原始 OHLC d$f 子集数据来填充这个新的 d$f年号。这样做的目的是,在新的 d$f 中,我可以从第 x 天的所有高点中提取 MAX 值,并将其与其他变量一起放到新的 d$f 列中,依此类推。我最接近这个目标的是使用下面的代码,但是,这会返回来自 OHLC 的所有值,我无法改变它,因此只有一年中的日期数字被带到新的 d$f .
DF<-DIA_5[match(unique(DIA_5[,6]), DIA_5[,6]),]
row.names DATE OPEN HIGH LOW CLOSE DOY
1 1 2015-09-21 09:30:00 164.67 164.7100 164.370 164.5300 264
2 79 2015-09-22 09:30:00 162.62 162.9600 162.620 162.7544 265
3 157 2015-09-23 09:30:00 163.26 163.3800 162.980 163.1400 266
4 235 2015-09-24 09:30:00 161.12 161.3700 161.060 161.2300 267
5 313 2015-09-25 09:30:00 163.81 163.9100 163.570 163.5800 268
尽管使用上述代码获得的数据多于所需数据,但我还是决定尝试对数据进行子集化。因此,从上面我想在 264 旁边的行中将此值用作主 OHLC d$f 上的过滤器,然后在高点列中提取最高值。使用
DF[,6] <- max(subset(DIA_5[,3], yday(DIA_5[,1]) == DF[,6] ))
给我
Warning message:
In yday(DIA_5[, 1]) == DF[, 6] :
longer object length is not a multiple of shorter object length
它确实在 d$f 上提供了一个新列,但它重复了相同的值。
row.names DATE OPEN HIGH LOW CLOSE DOY
1 1 2015-09-21 09:30:00 164.67 164.7100 164.370 164.5300 179.02
2 79 2015-09-22 09:30:00 162.62 162.9600 162.620 162.7544 179.02
3 157 2015-09-23 09:30:00 163.26 163.3800 162.980 163.1400 179.02
4 235 2015-09-24 09:30:00 161.12 161.3700 161.060 161.2300 179.02
5 313 2015-09-25 09:30:00 163.81 163.9100 163.570 163.5800 179.02
6 391 2015-09-28 09:30:00 162.04 162.0600 161.660 161.7100 179.02
我尝试使用我的子集语法从随机 DOY 号中提取最大高值,它似乎工作正常;
h <- max(subset(DIA_5[,3], yday(DIA_5[,1]) == DF[1,6] ))
但我只是不知道如何执行此操作,以便它在一年中的 x 高列中创建一个新的 MAX 值列。
对此的任何帮助将不胜感激。
【问题讨论】:
-
你试过使用包
data.table吗?您可以尝试在表达式中使用 by 参数 -
我认为你应该查看
dplyr教程。