2017-01-20 31 views
0

我想根据值条件提取行,然后在该行之前的任何行。举个例子下面的示例:基于值和与另一行的邻近度提取行?

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) 

假设每个工人的日期之间的差异是在几秒钟内,我将如何提取的行,显示900的diff一个秒,并且另外任何行的邻近,来在之前呢?

回答

0

您没有指定答案是否应该使用data.table或其他。 我使用dplyr。因为你想两行之间的差异大于900秒,我比较当前行与前一行,但也与下一行,使用leadlag

library(dplyr) 

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