2016-01-29 2 views
3

У меня есть тайм-аут 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) с несколькими отдельными временными рядами и может быть довольно большим.

+4

Почему в мире вы бы указали таблицу HTML, когда ваш вопрос касается R? Предоставьте объект 'data.frame', используя функцию' dput'. – brittenb

+0

Сделал это немного более читаемым, спасибо за предложение. – Hejlesen

ответ

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 
0

Если имя вашей data.frame является "ДФ"

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) 
    } 
}