根据时间序列中的间隙对行进行分组

时间:2016-01-29 14:30:30

标签: r

我有gps数据的时间序列,需要根据时间戳中的间隙将其细分为更小的部分。

作为一个例子,考虑以下数据框,我想添加一个段号来分割每个“时间戳”的时间戳,每次有时间间隔时有效地吐出数据系列至少 30秒

生成的data.frame看起来像这样:

   timestamp segment
1          1       1
2          3       1
3          5       1
4         10       1
5         42       2
6         45       2
7         92       3
8        156       4
9        160       4
10       162       4
11       163       4
12       164       4
13       200       5
14       203       5

有效地做这件事吗? data.frame是一个分组的tbl_df(dplyr包),有几个不同的时间序列,可能非常大。

2 个答案:

答案 0 :(得分:3)

您的示例数据

t <- c(1, 3, 5, 10, 42, 45, 92, 156, 160, 162, 163, 164, 200, 203)

细分数

s <- cumsum(c(TRUE,diff(t)>=30))

输出

data.frame(timestamp=t,segment=s)
   timestamp segment
1          1       1
2          3       1
3          5       1
4         10       1
5         42       2
6         45       2
7         92       3
8        156       4
9        160       4
10       162       4
11       163       4
12       164       4
13       200       5
14       203       5

答案 1 :(得分:0)

如果data.frame的名称是“df”

df$segment[1] <- 1

for (i in 2:nrow(df)) {
    if (df$timestamp[i] < (df$timestamp[i-1] + 30)) {
        df$segment[i] <- df$segment[i-1]
    } else {
        df$segment[i] <- (df$segment[i-1] + 1)
    }
}