【问题标题】:Time since event with multiple events自有多个事件的事件以来的时间
【发布时间】:2022-01-17 04:21:15
【问题描述】:

我有一个数据集,其中包含多个地点的活动日期:

year<-rep(2010:2021,3)
month<-rep(1:3,12)
loc<-rep(letters[1:3],each=12)
event_date<-as.Date(paste(year,month, "01"), "%Y%m%d")
event_data<-data.frame(loc,year,event_date)

我想扩展数据集,因此对于一年中的每个月,我都有一个时间,因为每个位置的事件变量(最好是几个月,但几天也可以)。我在下面尝试过,但是在年份的变化中有负值,我想继续从事件开始到下一年的事件(没有负值)

months<-expand.grid(year=unique(year),month=1:12)
month_data<-left_join(event_data, months, by = "year")
month_data$date<-as.Date(paste(month_data$year,month_data$month, "01"), "%Y%m%d")
month_data$diff<-month_data$date-month_data$event_date

【问题讨论】:

    标签: r date


    【解决方案1】:

    可能不是最整洁的,但这已经成功了。我编写了一个循环,而不是 expand.grid,它在每个事件日期之间按月创建日期序列:

    res<-list()
    r_list<-list()
    
    
    for(i in unique(event_data$loc)) {
      
      event_data1<-event_data[event_data$loc==i,] # outer loop splitting dataset by location 
      
      
      for (j in 1:length(event_data1$event_date)) {
        if (is.na(event_data1$event_date[j+1]) == TRUE) {
          dates<-as.Date(seq(event_data1$event_date[j],(event_data1$event_date[j]+365), by = 'month')) # seq[j+1] fails as there is no date after the last one. Adding a years worth of months 
          dates<-head(dates, -1)
          camp<-rep(year(dates)[1], length(dates))
          diff<- 0:(length(camp)-1) 
          loc<-rep(event_data1$loc[j], length(dates))
          r_list[[j]]<-data.frame(dates,camp,diff,loc)
          
        }
        else {dates<-as.Date(seq(event_data1$event_date[j],event_data1$event_date[j+1], by = 'month')) # sequence from one event to another by month 
        dates<-head(dates, -1) # the last date in the seq is in fact the next event so needs removed 
        camp<-rep(year(dates)[1], length(dates)) # year of event  
        diff<- 0:(length(camp)-1)  # Months since event 
        loc<-rep(event_data1$loc[j], length(dates)) # location 
        r_list[[j]]<-data.frame(dates,camp,diff,loc)
       
        }
       
      }
      res<-c(res,r_list) 
    }
    
    data_new<-do.call("rbind",(res))
    

    【讨论】:

      猜你喜欢
      • 2018-07-10
      • 1970-01-01
      • 2015-12-19
      • 2014-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-26
      相关资源
      最近更新 更多