san1
san1

Reputation: 511

allocate time series interval to the column based on count of rows

need to assaign time interval based on "cnt_rows" columns group by "Name". i.e if count is around
96 means then it will be 15 mins time interval . so if count is 94 then time interval should stop at
11:15 PM (Based on number of rows) and if they are exactly 96 then it should end at 11:45 PM every day.
Same for 5 mins interval. Interval should not exceed the day

cnt_rows = c("94","94",".",".","94","286","286",".",".",".","286","96","96",".",".","96")
Name = c("Alan","Alan",".",".","Alan","Steve","Steve",".",".",".","Steve","Mike","Mike",".",".","Mike")
Values = c("10","10",".",".","45","91","35",".",".",".","46","34","5",".",".","34")

Input Table

  df = data.frame(cnt_rows,Name,Values)

Output Table

dt = c("2019-12-01 00:00:00","2019-12-01 00:15:00",".",".","2019-12-01 23:15:00","2019-12-01 00:00:00","2019-12-01 00:05:00",".",".",".","2019-12-01 23:45:00","2019-12-01 00:00:00","2019-12-01 00:15:00",".",".","2019-12-01 23:45:00")

df_out = data.frame(cnt_rows,Name,Values,dt)

Thanks in advance.

Upvotes: 0

Views: 30

Answers (1)

Ronak Shah
Ronak Shah

Reputation: 389235

Maybe you can try :

library(dplyr)
date <- as.POSIXct('2019-12-01')

df %>%
  mutate(breaks = ifelse(cnt_rows %in% c(94, 96), '15 min', '5 min')) %>%
  group_by(Name) %>%
  mutate(dt = seq(date, by = first(breaks), length.out = n()))

Upvotes: 0

Related Questions