在 R 中递增地添加按 ID 分组的时间戳列的秒数

Incrementally add seconds of a timestamp column grouped by ID in R

我有一个数据框,它本质上是一个时间序列数据。

    Timestamp <- c("1/27/2015 18:28:16","1/27/2015 18:28:17","1/27/2015 18:28:19","1/27/2015 18:28:20","1/27/2015 18:28:23","1/28/2015 22:43:08","1/28/2015 22:43:09","1/28/2015 22:43:13","1/28/2015 22:43:15","1/28/2015 22:43:16"
) 
    ID <- c("A","A","A","A","A","B","B","B","B","B")
    v1<- c(1.70,1.71,1.77,1.79,1.63,7.20,7.26,7.16,7.18,7.18) 
    df <- data.frame(Timestamp ,ID,v1)

Timestamp            ID             v1
1/27/2015 18:28:16   A              1.70
1/27/2015 18:28:17   A              1.71
1/27/2015 18:28:19   A              1.77
1/27/2015 18:28:20   A              1.79
1/27/2015 18:28:23   A              1.63
1/28/2015 22:43:08   B              7.20
1/28/2015 22:43:09   B              7.26
1/28/2015 22:43:13   B              7.16
1/28/2015 22:43:15   B              7.18
1/28/2015 22:43:16   B              7.18

因为我不太关心时间戳,所以我想创建一个名为 interval 的列来将这些数据绘制在一个图中。

我这样做错误地创建了区间列

df$interval <- cut(df$Timestamp, breaks="sec")

我想逐步添加时间戳的 "secs" 并将其放在间隔列中,这应该按 ID 分组。我的意思是,每次它有一个新 ID 时,间隔列都会重置为 1,然后逐渐添加时间戳(秒)。

我想要的输出

Timestamp            ID             v1      Interval
1/27/2015 18:28:16   A              1.70      1
1/27/2015 18:28:17   A              1.71      2
1/27/2015 18:28:19   A              1.77      4
1/27/2015 18:28:20   A              1.79      5
1/27/2015 18:28:23   A              1.63      8
1/28/2015 22:43:08   B              7.20      1
1/28/2015 22:43:09   B              7.26      2
1/28/2015 22:43:13   B              7.16      6 
1/28/2015 22:43:15   B              7.18      8
1/28/2015 22:43:16   B              7.18      9

我还想使用 ggplot 和间隔与 v1 按 ID 绘制此图,因此我们在同一图中得到 2 个时间序列。然后我将从中提取特征。

请帮助我解决这个问题,以便我可以将其应用于更大的数据集。

一个解决方案data.table

对于数据:

library(data.table)
df <- as.data.table(df)
df$Timestamp <- as.POSIXct(df$Timestamp, format='%m/%d/%Y %H:%M:%S')
df[, Interval := as.numeric(difftime(Timestamp, .SD[1, Timestamp], units='secs') + 1)   , by=ID]

输出:

> df
              Timestamp ID   v1 Interval
 1: 2015-01-27 18:28:16  A 1.70        1
 2: 2015-01-27 18:28:17  A 1.71        2
 3: 2015-01-27 18:28:19  A 1.77        4
 4: 2015-01-27 18:28:20  A 1.79        5
 5: 2015-01-27 18:28:23  A 1.63        8
 6: 2015-01-28 22:43:08  B 7.20        1
 7: 2015-01-28 22:43:09  B 7.26        2
 8: 2015-01-28 22:43:13  B 7.16        6
 9: 2015-01-28 22:43:15  B 7.18        8
10: 2015-01-28 22:43:16  B 7.18        9

然后 ggplot:

library(ggplot2)
ggplot(df, aes(x=Interval, y=v1, color=ID)) + geom_line()

和图表: