在R中定义的时间间隔内向时间戳添加秒数
我有一个带有ID和时间戳的数据集 每个ID每分钟有12个时间戳观测值。 我很难在每分钟的时间戳上增加5秒的间隔在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
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))