我有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包),有几个不同的时间序列,可能非常大。
答案 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)
}
}