2017-01-20 6 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を使用します。あなたは魔女との両方の行をしたいような違いは、私はleadlag

library(dplyr) 

work %>% group_by(worker) %>% arrange(worker, dt) %>% 
    filter((dt-lag(dt))>'0.25 hours'|(lead(dt)-dt)>'0.25 hours') 
を使用して、前の行でなく、次の行を現在の行を比較し、> 900秒です
関連する問題