我尝试根据值条件然后在该行之前的任何行提取行。以下面的示例为例:
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秒的行,此外还有任何相邻的行,在它之前?
答案 0 :(得分:0)
您没有指定答案是否应该使用data.table或其他内容。
我使用dplyr
。如果你想要两个之间的行,差异是&gt; 900秒,我使用lead
和lag
library(dplyr)
work %>% group_by(worker) %>% arrange(worker, dt) %>%
filter((dt-lag(dt))>'0.25 hours'|(lead(dt)-dt)>'0.25 hours')