如何在修改的行R上分配列值?

时间:2017-01-19 15:47:10

标签: r time data.table

我希望从另一个列行创建一个列,考虑到行位置。以下是我的示例数据:

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]

0 个答案:

没有答案