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
谢谢您的帮助