R 根据其他变量标记事件的第一个实例';s值

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,

对于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,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!