我在这里阅读了很多关于数据子集的线程,但是我没有找到任何能够回答我关于对时间序列数据集进行子集化的具体问题。
我想要做的是找到满足条件的行,然后删除满足条件的第一行,以及它之后的所有行(无论它们是否满足条件)。
示例数据集:
AnimalID Latitude Longitude Speed Date
99B 50.86190 -129.0875 5.6 2015-05-14 21:26:00
99B 50.86170 -129.0875 0.6 2015-05-14 21:32:00
99B 50.86150 -129.0810 0.5 2015-05-14 21:33:00
99B 50.86140 -129.0800 0.3 2015-05-14 21:40:00
要查找满足条件的行,我有代码
DT[Speed < 0.8 & Date > as.POSIXct("2015-05-14 21:30:00"), by=AnimalID]
但是,我不知道如何删除行。
非常感谢
答案 0 :(得分:4)
怎么样
require(data.table)
dt = data.table(
AnimalID = rep('99B', 4),
Latitude = c(50.86190,50.86170,50.86150,50.86140),
Longitude = c(-129.0875,-129.0875,-129.0810,-129.0800),
Speed = c(5.6,0.6,0.5,0.3),
Date = as.POSIXct(c('2015-05-14 21:26:00', '2015-05-14 21:32:00', '2015-05-14 21:33:00', '2015-05-14 21:40:00')))
dt[, cond := Speed < 0.8 & Date > as.POSIXct("2015-05-14 21:30:00")]
dt[, cond_cumsum := cumsum(cond)] # everything > 0 follows a row that met the condition
dt_sub = dt[cond_cumsum == 0]
答案 1 :(得分:0)
您可以使用which
index <- which(DT$Speed < 0.8 & DT$Date > as.POSIXct("2015-05-14 21:30:00"))[1]
或安全:
index <- min(which(DT$Speed < 0.8 & DT$Date > as.POSIXct("2015-05-14 21:30:00")))
然后,您可以删除从索引到最后一行的数据集中的行范围:
DT <- DT[-(index:nrow(DT))]