我试图解决的问题是我有一个数据框,其中包含排序的 POSIXct 变量。每行都进行分类,我想获取每个级别的每行之间的时间差,并将该数据添加回新变量中。可重现的问题如下。
以下函数仅用于创建随机时间的样本数据
为了这个问题的目的。
random.time <- function(N, start, end) {
st <- as.POSIXct(start)
en <- as.POSIXct(end)
dt <- as.numeric(difftime(en, st, unit="sec"))
ev <- sort(runif(N, 0, dt))
rt <- st + ev
return(rt)
}
模拟问题的代码如下:
set.seed(123)
category <- sample(LETTERS[1:5], 20, replace=TRUE)
randtime <- random.time(20, '2015/06/01 08:00:00', '2015/06/01 18:00:00')
df <- data.frame(category, randtime)
预期结果数据框如下:
>category randtime timediff (secs)
>A 2015-06-01 09:05:00 0
>A 2015-06-01 09:06:30 90
>A 2015-06-01 09:10:00 210
>B 2015-06-01 10:18:58 0
>B 2015-06-01 10:19:58 60
>C 2015-06-01 08:14:00 0
>C 2015-06-01 08:16:30 150
输出中的每个子组的第一行的 timediff 值为 0,因为没有前一行。我能够按类别分组并调用以下函数来计算差异,但无法让它整理所有类别组的最终输出。
getTimeDiff <- function(x) {
no_rows <- nrow(x)
if(no_rows > 1) {
for(i in 2:no_rows) {
t <- x[i, "randtime"] - x[i-1, "randtime"]
}
}
}
我已经在这里呆了两天了,但没有运气,所以非常感谢任何帮助。
谢谢。