R 根据其他变量标记事件的第一个实例';s值
对于R和解决下面这样的问题都是新手,因此不确定在特定情况下如何实现某些功能 我有这样一个数据帧:R 根据其他变量标记事件的第一个实例';s值,r,indexing,data.table,R,Indexing,Data.table,对于R和解决下面这样的问题都是新手,因此不确定在特定情况下如何实现某些功能 我有这样一个数据帧: df <- data.frame(DATETIME = seq(from = as.POSIXct('2014-01-01 00:00', tz = "GMT"), to = as.POSIXct('2014-01-01 06:00', tz = "GMT"), by='15 mins'), Price = c(23,22,23,24,27,31,33,34,
df <- data.frame(DATETIME = seq(from = as.POSIXct('2014-01-01 00:00', tz = "GMT"), to = as.POSIXct('2014-01-01 06:00', tz = "GMT"), by='15 mins'),
Price = c(23,22,23,24,27,31,33,34,31,26,24,23,19,18,19,19,23,25,26,26,27,30,26,25,24),
TroughPriceFlag = c(0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0))
df <- data.table(df)
df
DATETIME Price TroughPriceFlag
1: 2014-01-01 00:00:00 23 0
2: 2014-01-01 00:15:00 22 1
3: 2014-01-01 00:30:00 23 0
4: 2014-01-01 00:45:00 24 0
5: 2014-01-01 01:00:00 27 0
6: 2014-01-01 01:15:00 31 0
7: 2014-01-01 01:30:00 33 0
8: 2014-01-01 01:45:00 34 0
9: 2014-01-01 02:00:00 31 0
10: 2014-01-01 02:15:00 26 0
11: 2014-01-01 02:30:00 24 0
12: 2014-01-01 02:45:00 23 0
13: 2014-01-01 03:00:00 19 0
14: 2014-01-01 03:15:00 18 1
15: 2014-01-01 03:30:00 19 0
16: 2014-01-01 03:45:00 19 0
17: 2014-01-01 04:00:00 23 0
18: 2014-01-01 04:15:00 25 0
19: 2014-01-01 04:30:00 26 0
20: 2014-01-01 04:45:00 26 0
21: 2014-01-01 05:00:00 27 0
22: 2014-01-01 05:15:00 30 0
23: 2014-01-01 05:30:00 26 0
24: 2014-01-01 05:45:00 25 0
25: 2014-01-01 06:00:00 24 0
我真的不确定从哪里开始,因为时间间隔可能相当大,我只在向前/向后几步的上下文中使用索引。请帮忙
提前感谢您可以使用
数据链接操作。表
包,我们的想法是通过价格标签对的累计
进行分组:
library(data.table)
df[, col1:=pmatch(Price-Price[1]>10,T, nomatch=0), cumsum(TroughPriceFlag)][
, count:=which(col1==1)-1,cumsum(TroughPriceFlag)][
TroughPriceFlag==0, count:=NA]
#> df
# DATETIME Price TroughPriceFlag col1 count
# 1: 2014-01-01 00:00:00 23 0 0 NA
# 2: 2014-01-01 00:15:00 22 1 0 5
# 3: 2014-01-01 00:30:00 23 0 0 NA
# 4: 2014-01-01 00:45:00 24 0 0 NA
# 5: 2014-01-01 01:00:00 27 0 0 NA
# 6: 2014-01-01 01:15:00 31 0 0 NA
# 7: 2014-01-01 01:30:00 33 0 1 NA
# 8: 2014-01-01 01:45:00 34 0 0 NA
# 9: 2014-01-01 02:00:00 31 0 0 NA
#10: 2014-01-01 02:15:00 26 0 0 NA
#11: 2014-01-01 02:30:00 24 0 0 NA
#12: 2014-01-01 02:45:00 23 0 0 NA
#13: 2014-01-01 03:00:00 19 0 0 NA
#14: 2014-01-01 03:15:00 18 1 0 8
#15: 2014-01-01 03:30:00 19 0 0 NA
#16: 2014-01-01 03:45:00 19 0 0 NA
#17: 2014-01-01 04:00:00 23 0 0 NA
#18: 2014-01-01 04:15:00 25 0 0 NA
#19: 2014-01-01 04:30:00 26 0 0 NA
#20: 2014-01-01 04:45:00 26 0 0 NA
#21: 2014-01-01 05:00:00 27 0 0 NA
#22: 2014-01-01 05:15:00 30 0 1 NA
#23: 2014-01-01 05:30:00 26 0 0 NA
#24: 2014-01-01 05:45:00 25 0 0 NA
#25: 2014-01-01 06:00:00 24 0 0 NA
您可以使用数据链接操作。表
包,其思想是通过价格标签对的累计
进行分组:
library(data.table)
df[, col1:=pmatch(Price-Price[1]>10,T, nomatch=0), cumsum(TroughPriceFlag)][
, count:=which(col1==1)-1,cumsum(TroughPriceFlag)][
TroughPriceFlag==0, count:=NA]
#> df
# DATETIME Price TroughPriceFlag col1 count
# 1: 2014-01-01 00:00:00 23 0 0 NA
# 2: 2014-01-01 00:15:00 22 1 0 5
# 3: 2014-01-01 00:30:00 23 0 0 NA
# 4: 2014-01-01 00:45:00 24 0 0 NA
# 5: 2014-01-01 01:00:00 27 0 0 NA
# 6: 2014-01-01 01:15:00 31 0 0 NA
# 7: 2014-01-01 01:30:00 33 0 1 NA
# 8: 2014-01-01 01:45:00 34 0 0 NA
# 9: 2014-01-01 02:00:00 31 0 0 NA
#10: 2014-01-01 02:15:00 26 0 0 NA
#11: 2014-01-01 02:30:00 24 0 0 NA
#12: 2014-01-01 02:45:00 23 0 0 NA
#13: 2014-01-01 03:00:00 19 0 0 NA
#14: 2014-01-01 03:15:00 18 1 0 8
#15: 2014-01-01 03:30:00 19 0 0 NA
#16: 2014-01-01 03:45:00 19 0 0 NA
#17: 2014-01-01 04:00:00 23 0 0 NA
#18: 2014-01-01 04:15:00 25 0 0 NA
#19: 2014-01-01 04:30:00 26 0 0 NA
#20: 2014-01-01 04:45:00 26 0 0 NA
#21: 2014-01-01 05:00:00 27 0 0 NA
#22: 2014-01-01 05:15:00 30 0 1 NA
#23: 2014-01-01 05:30:00 26 0 0 NA
#24: 2014-01-01 05:45:00 25 0 0 NA
#25: 2014-01-01 06:00:00 24 0 0 NA
你没有低于10英镑的价格。而且没有TroughPrice
。这不是低于10的价格。。这是第一次价格上涨10美元或以上。从22的谷底价格,下一个区间的价格是增加到23,这是一个1美元的变化,所以没有旗帜。从22日的谷底价格开始,两个区间之后的价格是24美元,所以谷底以来的价格已经上涨了2美元,所以没有旗帜。从22日的谷底价格,5个区间后的价格已经上升到33美元,这是增加了11美元,是第一次价格上涨超过10美元。所以旗子是1,所以你的问题不清楚。你的意思是两个连续的时间戳之间有10美元的正增量。请将您的评论转移到您的问题中。自troughpriceflag以来,增量为10美元。我将据此进行编辑,谢谢!希望这更清楚,谢谢@pascalYou没有低于10的价格。而且没有TroughPrice
。这不是低于10的价格。。这是第一次价格上涨10美元或以上。从22的谷底价格,下一个区间的价格是增加到23,这是一个1美元的变化,所以没有旗帜。从22日的谷底价格开始,两个区间之后的价格是24美元,所以谷底以来的价格已经上涨了2美元,所以没有旗帜。从22日的谷底价格,5个区间后的价格已经上升到33美元,这是增加了11美元,是第一次价格上涨超过10美元。所以旗子是1,所以你的问题不清楚。你的意思是两个连续的时间戳之间有10美元的正增量。请将您的评论转移到您的问题中。自troughpriceflag以来,增量为10美元。我将据此进行编辑,谢谢!希望这更清楚,谢谢@pascalEither您的输出或OP预期结果不正确。更正,我的代码中确实有一个输入错误,我根据col1设置NA,而troughPriceFlag的值是0!您的输出或OP预期结果不正确。更正,我的代码中确实有一个输入错误,我根据col1设置NA,而troughPriceFlag的值是0!