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

Если предположить, что различия между датами для каждого работника, чтобы быть в секундах, как бы извлечь строки, которые показывают diff от 900 секунд, и, кроме того любая строка, которая находится рядом, приходя перед этим?

ответ

0

Вы не указали, должен ли отвечать использовать data.table или что-то еще. Я использую dplyr. Как вы хотите обе строки между ведьмой разницей> 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') 
Смежные вопросы