根据值和邻近行提取行?

时间:2017-01-20 14:37:11

标签: r timestamp diff

我尝试根据值条件然后在该行之前的任何行提取行。以下面的示例为例:

library(data.table)


latemail <- function(N, st="2012/01/01", et="2012/01/07") {
  st <- as.POSIXct(as.Date(st))
  et <- as.POSIXct(as.Date(et))
  dt <- as.numeric(difftime(et,st,unit="sec"))
  ev <- sort(runif(N, 0, dt))
  rt <- st + ev

}

#create our data frame
set.seed(42)
dt = latemail(100000)
work = setDT(as.data.frame(dt))
work$worker = stringi::stri_rand_strings(1000, 5)   
work$dt = as.POSIXct(as.character(work$dt), tz = "GMT")

#order
work = work[order(work$worker, work$dt),]

#apply difftime
options(scipen=999)
work[, time_diff:= c(NA, diff(dt)), by = worker] 
work$time_diff = as.numeric(work$time_diff)

假设每个工作人员的日期之间的差异以秒为单位,我如何提取显示diff 900秒的行,此外还有任何相邻的行,在它之前?

1 个答案:

答案 0 :(得分:0)

您没有指定答案是否应该使用data.table或其他内容。 我使用dplyr。如果你想要两个之间的行,差异是&gt; 900秒,我使用leadlag

将当前行与上一行进行比较,但也与下一行进行比较
library(dplyr)

work %>% group_by(worker) %>% arrange(worker, dt) %>%
  filter((dt-lag(dt))>'0.25 hours'|(lead(dt)-dt)>'0.25 hours')