Valentin
Valentin

Reputation: 13

storing lubridate intervals in a dataframe (R)

I want to create a dataframe of 15 minute intervals over 24 hours starting with a certain inverval on several dates. I use a loop for that but instant of the actual intervals it stores the number of seconds which is not useful in my case. Is there any way to avoid this? I need the intervals to look how often timed events happen in these intervals. I found one similar question, but the answer concentrated on using lapply instead of apply, which isn't applicable here.

So here is a basic example:

begin<-as.POSIXct(rbind("2016-03-31 09:00:00","2016-04-12 09:00:00"))
end<-as.POSIXct(rbind("2016-03-31 09:15:00","2016-04-12 09:15:00"))
int<-as.interval(begin,end)
aufl<-duration(15, "mins")
Intervall=data.frame()
for (j in 1:length(int)){for (i in 1:96){Intervall[j,i]<-int_shift(int[j],aufl*(i-1))}}
Intervall

Upvotes: 1

Views: 703

Answers (1)

PhiSeu
PhiSeu

Reputation: 311

I created an answer, I hope this is what you are looking for. If not, please comment:

library(lubridate)

begin <- as.POSIXct(rbind("2016-03-31 09:00:00","2016-04-12 09:00:00"))

# copy begin time for loop
begin_new <- begin

# create durateion object
aufl <- duration(15, "mins")

# count times for loop
times <- 24*60/15

# create dataframe with begin time
Intervall <- data.frame(begin,stringsAsFactors = FALSE)

for (i in 1:times){

  cat("test",i,"\n")

  # save old time for interval calculation
  begin_start <- begin_new
  # add 15 Minutes to original time
  begin_new <- begin_new + aufl

  cat(begin_new,"\n")

  # create an interval object between 
  new_dur <- interval(begin_start,begin_new)

  # bind to original dataframe
  Intervall <- cbind(Intervall,new_dur) 

}

# Add column names
vec_names <- paste0("v",c(1:(times+1)))
colnames(Intervall) <- vec_names

Upvotes: 1

Related Questions