R 如何使用data.table选择一行及其下一行和上一行

R 如何使用data.table选择一行及其下一行和上一行,r,data.table,R,Data.table,我有这个数据表: > dput(data_DT) structure( list(Date = structure( c(1512518400, 1512518400, 1512518400, 1512518400, 1512518400, 1512518400), class = c("POSIXct", "POSIXt"),

我有这个数据表:

> dput(data_DT)

    structure(
     list(Date = structure(
                 c(1512518400, 1512518400, 1512518400,
                   1512518400, 1512518400, 1512518400), 
                 class = c("POSIXct", "POSIXt"), 
                 tzone = "UTC"), 
          Time = structure(
                 c(1512573600, 1512573300, 1512573000, 
                   1512572700, 1512572400, 1512572100), 
                 class = c("POSIXct", "POSIXt"), 
                 tzone = "UTC"), 
          High = c(46, 47, 49, 49, 49, 58),
          High_lag1 = c(47, 49, 49, 49, 58, 60), 
          Low = c(45, 46, 46, 47, 43, 44), 
          Low_lag1 = c(46, 46, 47, 43, 44, 58), 
          tr = c(1, 3, 2, 6, 14), 
          tr_lag1 = c(1, 3, 2, 6, 14, 2)
        ), 
     row.names = c(NA, -6L), 
     class = c("data.table", "data.frame"))
我想根据一些条件选择一些行,然后选择上一行或下一行

这是我目前掌握的代码

数据\u DT1 13]

代码选择了我想要的时间为14:55的行,但在本例中,我需要时间为15:00的行


此外,在某些情况下,我将选择一行并需要上一行。

您可以使用
which()
函数返回您的条件索引,然后根据需要添加或删除:

# get row and next row :
data_DT[which(Low < Low_lag1 & High < High_lag1 & tr > 13)+c(0,1)]
#          Date                Time High High_lag1 Low Low_lag1 tr tr_lag1
# 1: 2017-12-06 2017-12-06 14:55:00   58        60  44       58 14       2
# 2:       <NA>                <NA>   NA        NA  NA       NA NA      NA

# get previous row and row
data_DT[which(Low < Low_lag1 & High < High_lag1 & tr > 13)+c(-1,0)]
#          Date                Time High High_lag1 Low Low_lag1 tr tr_lag1
# 1: 2017-12-06 2017-12-06 15:00:00   49        58  43       44  6      14
# 2: 2017-12-06 2017-12-06 14:55:00   58        60  44       58 14       2

#获取行和下一行:
数据_DT[which(低<低<高<高<高<高>13)+c(0,1)]
#日期时间高高滞后1低低滞后1 tr滞后1
# 1: 2017-12-06 2017-12-06 14:55:00   58        60  44       58 14       2
#2:NA-NA-NA-NA-NA
#获取上一行和下一行
数据_DT[其中(低<低\u lag1和高<高\u lag1和tr>13)+c(-1,0)]
#日期时间高高滞后1低低滞后1 tr滞后1
# 1: 2017-12-06 2017-12-06 15:00:00   49        58  43       44  6      14
# 2: 2017-12-06 2017-12-06 14:55:00   58        60  44       58 14       2

谢谢您的帮助