在R中定义的时间间隔内向时间戳添加秒数

在R中定义的时间间隔内向时间戳添加秒数,r,R,我有一个带有ID和时间戳的数据集 每个ID每分钟有12个时间戳观测值。 我很难在每分钟的时间戳上增加5秒的间隔 Actual Data Desired Format ID Time ID Time 4466 12/1/14 19:56 4466 12/1/14 19:56:00 4466 12/1/14 19:56 4466 12/1/14 1

我有一个带有ID和时间戳的数据集

每个ID每分钟有12个时间戳观测值。 我很难在每分钟的时间戳上增加5秒的间隔

Actual Data                     Desired Format

    ID       Time           ID        Time     
    4466    12/1/14 19:56   4466    12/1/14 19:56:00
    4466    12/1/14 19:56   4466    12/1/14 19:56:05
    4466    12/1/14 19:56   4466    12/1/14 19:56:10
    4466    12/1/14 19:56   4466    12/1/14 19:56:15
    4466    12/1/14 19:56   4466    12/1/14 19:56:20
    4466    12/1/14 19:56   4466    12/1/14 19:56:25
    4466    12/1/14 19:56   4466    12/1/14 19:56:30
    4466    12/1/14 19:56   4466    12/1/14 19:56:35
    4466    12/1/14 19:56   4466    12/1/14 19:56:40
    4466    12/1/14 19:56   4466    12/1/14 19:56:45
    4466    12/1/14 19:56   4466    12/1/14 19:56:50
    4466    12/1/14 19:56   4466    12/1/14 19:56:55
    1136    3/23/15 23:00   1136    3/23/15 23:00:00
    1136    3/23/15 23:00   1136    3/23/15 23:00:05
    1136    3/23/15 23:00   1136    3/23/15 23:00:10
    1136    3/23/15 23:01   1136    3/23/15 23:01:00
    1136    3/23/15 23:01   1136    3/23/15 23:01:05
    1136    3/23/15 23:01   1136    3/23/15 23:01:10
    1136    3/23/15 23:01   1136    3/23/15 23:01:15
    1136    3/23/15 23:01   1136    3/23/15 23:01:20
    1136    3/23/15 23:01   1136    3/23/15 23:01:25
    1136    3/23/15 23:01   1136    3/23/15 23:01:30
    1136    3/23/15 23:01   1136    3/23/15 23:01:35
    1136    3/23/15 23:01   1136    3/23/15 23:01:40
    1136    3/23/15 23:01   1136    3/23/15 23:01:45
    1136    3/23/15 23:01   1136    3/23/15 23:01:50
    1136    3/23/15 23:01   1136    3/23/15 23:01:55

我们可以使用
data.table
执行此操作。将“data.frame”转换为“data.table”(
setDT(df1)
),按“ID”和“Time”分组,使用
sprintf
创建“NewTime”列,将“Time”与每5秒创建的序列粘贴在一起

library(data.table)
setDT(df1)[, NewTime := sprintf("%s:%02d", Time, 
          seq(0, 55, by = 5)[seq_len(.N)]) , .(ID, Time)]
df1
#      ID          Time          NewTime
# 1: 4466 12/1/14 19:56 12/1/14 19:56:00
# 2: 4466 12/1/14 19:56 12/1/14 19:56:05
# 3: 4466 12/1/14 19:56 12/1/14 19:56:10
# 4: 4466 12/1/14 19:56 12/1/14 19:56:15
# 5: 4466 12/1/14 19:56 12/1/14 19:56:20
# 6: 4466 12/1/14 19:56 12/1/14 19:56:25
# 7: 4466 12/1/14 19:56 12/1/14 19:56:30
# 8: 4466 12/1/14 19:56 12/1/14 19:56:35
# 9: 4466 12/1/14 19:56 12/1/14 19:56:40
#10: 4466 12/1/14 19:56 12/1/14 19:56:45
#11: 4466 12/1/14 19:56 12/1/14 19:56:50
#12: 4466 12/1/14 19:56 12/1/14 19:56:55
#13: 1136 3/23/15 23:00 3/23/15 23:00:00
#14: 1136 3/23/15 23:00 3/23/15 23:00:05
#15: 1136 3/23/15 23:00 3/23/15 23:00:10
#16: 1136 3/23/15 23:01 3/23/15 23:01:00
#17: 1136 3/23/15 23:01 3/23/15 23:01:05
#18: 1136 3/23/15 23:01 3/23/15 23:01:10
#19: 1136 3/23/15 23:01 3/23/15 23:01:15
#20: 1136 3/23/15 23:01 3/23/15 23:01:20
#21: 1136 3/23/15 23:01 3/23/15 23:01:25
#22: 1136 3/23/15 23:01 3/23/15 23:01:30
#23: 1136 3/23/15 23:01 3/23/15 23:01:35
#24: 1136 3/23/15 23:01 3/23/15 23:01:40
#25: 1136 3/23/15 23:01 3/23/15 23:01:45
#26: 1136 3/23/15 23:01 3/23/15 23:01:50
#27: 1136 3/23/15 23:01 3/23/15 23:01:55
数据
df1或只是:

df <- data.frame(ID = 4466, Time = "12/1/14 19:56") 
df2 <- cbind(df[rep(1 : nrow(df),each=12),], ntime = strptime (paste(df$Time, ":", seq(0, 55, 5),sep=""), "%m/%d/%y %H:%M:%S", tz= "UTC"))
df您可以使用包
dplyr
中的
分组依据()
行编号()

library(dplyr)
df %>% 
  group_by(ID,Time ) %>%
  mutate(NTime=sprintf("%s.%02d",Time, row_number(Time)*5))

我首先将数据转换为实际的
POSIXct
datetime对象-
dat$Time
library(dplyr)
df %>% 
  group_by(ID,Time ) %>%
  mutate(NTime=sprintf("%s.%02d",Time, row_number(Time)*5))