2017-01-20 29 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')