我希望从另一个列行创建一个列,考虑到行位置。以下是我的示例数据:
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] #hours
work$time_diff = as.numeric(work$time_diff)
现在我要找的是以下内容:
dt worker time_diff dt2
1: 2011-12-31 19:32:12 04nFT NA 2011-12-31 21:00:10
2: 2011-12-31 21:00:10 04nFT 1.466111 2011-12-31 22:22:04
3: 2011-12-31 22:22:04 04nFT 1.365000 2011-12-31 23:47:04
4: 2011-12-31 23:47:04 04nFT 1.416667 2012-01-01 01:16:04
5: 2012-01-01 01:16:04 04nFT 1.483333 the next time
基本上对于每一行中的每个工作者,我将dt值从它后面的行中移出。以下是我所在的地方。这样,dt每行的最后一条记录的dt2为NA。我是否在正确的轨道上,不确定我是否需要循环?
work[, dt2:= c(NA, #something here
), by = worker]