【发布时间】:2017-05-01 14:46:04
【问题描述】:
我试图找出“价格”每天第一次高于另一个名为“dayhigh”的值。
我在将这个结果放入时间序列对象时遇到了问题,所以我只是将 POSIXlt 类用于日期时间,而参考日期在 Date 类中。 示例数据位于名为“示例”的框架中:
day,datetime,price,dayhigh
2016-09-01,2016-09-01 15:00:00,1.11912,1.11990
2016-09-01,2016-09-01 15:00:00,1.13000,1.11990
2016-09-01,2016-09-01 15:00:01,1.11911,1.11990
2016-09-05,2016-09-05 15:00:00,1.11436,1.11823
2016-09-05,2016-09-05 15:00:01,1.11436,1.11823
2016-09-05,2016-09-05 15:00:01,1.11900,1.11823
2016-09-05,2016-09-05 15:00:01,1.11436,1.11823
2016-09-06,2016-09-06 15:00:00,1.12383,1.12557
2016-09-06,2016-09-06 15:00:00,1.12382,1.12557
2016-09-06,2016-09-06 15:00:00,1.12382,1.12557
2016-09-06,2016-09-06 15:00:00,1.12384,1.12557
2016-09-06,2016-09-06 15:00:00,1.12384,1.12557
2016-09-06,2016-09-06 15:00:00,1.12558,1.12557
2016-09-06,2016-09-06 15:00:01,1.12559,1.12557
df = data.frame(
day = c("2016-09-01", "2016-09-01", "2016-09-01", "2016-09-05", "2016-09-05",
"2016-09-05", "2016-09-05", "2016-09-06", "2016-09-06", "2016-09-06",
"2016-09-06", "2016-09-06", "2016-09-06", "2016-09-06"),
datetime = c("2016-09-01 15:00:00", "2016-09-01 15:00:00", "2016-09-01 15:00:01",
"2016-09-05 15:00:00", "2016-09-05 15:00:01", "2016-09-05 15:00:01",
"2016-09-05 15:00:01", "2016-09-06 15:00:00", "2016-09-06 15:00:00",
"2016-09-06 15:00:00", "2016-09-06 15:00:00", "2016-09-06 15:00:00",
"2016-09-06 15:00:00", "2016-09-06 15:00:01"),
price = c(1.11912, 1.13, 1.11911, 1.11436, 1.11436, 1.119, 1.11436,
1.12383, 1.12382, 1.12382, 1.12384, 1.12384, 1.12558, 1.12559),
dayhigh = c(1.1199, 1.1199, 1.1199, 1.11823, 1.11823, 1.11823, 1.11823,
1.12557, 1.12557, 1.12557, 1.12557, 1.12557, 1.12557, 1.12557)
)
我的一个想法是将帧按天拆分为帧列表:
exlist <- split(example, as.Date(example$day))
这会返回一个对象列表。
我想要做的是在列表中的每个框架对象上使用which.max,并将“TRUE”添加到每个框架中的新列中,用于出现当天第一个高点的行。当天的第一个高点定义为每天的第一个price > dayhigh。
从那里我可以连接回单个帧并执行进一步分析。
【问题讨论】:
-
@Frank:标签
dataframe, data.table, max, which都是相关的,请停止恢复它们。