【问题标题】:storing lubridate intervals in a dataframe (R)在数据帧(R)中存储润滑间隔
【发布时间】:2016-09-10 09:34:56
【问题描述】:

我想在 24 小时内创建一个以 15 分钟为间隔的数据框,从几个日期的某个 inverval 开始。我为此使用了一个循环,但在实际间隔的瞬间,它存储了在我的情况下没有用的秒数。有没有办法避免这种情况?我需要间隔来查看这些间隔中定时事件发生的频率。我发现了一个类似的问题,但答案集中在使用 lapply 而不是 apply,这在这里不适用。

所以这里是一个基本的例子:

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

【问题讨论】:

    标签: r dataframe intervals lubridate


    【解决方案1】:

    我创建了一个答案,我希望这是您正在寻找的。如果没有,请评论:

    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
    

    【讨论】:

    • 非常感谢!你的回答比我的尝试要优雅得多。只是为了理解:“猫”在做什么?
    • cat 只是将变量begin_new 打印到控制台中,\n 创建一个新行。这仅用于调试。如果您对答案感到满意,请将其标记为已解决。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-04
    • 2021-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-11
    相关资源
    最近更新 更多