簡體   English   中英

如何檢查日期間隔是否在另一個間隔中

[英]How to check date interval is in another interval

我用以下代碼創建了cols和行

    library(lubridate)    

date1<-ymd_hms("2000-01-01 05:30:00",tz = "US/Eastern")  
date2<- ymd_hms("2000-01-01 00:00:00",tz = "US/Eastern")

cols <- lapply(0:14, function(x){
  mapply(function(y,z){
    interval((date1+days(x)+minutes(y)), (date1+days(x)+minutes(y+z)))
  }, y = c(0,150,420,600,720,840,1080), z = c(600,570,600,600,600,600,600), SIMPLIFY = FALSE)
})

rows <- lapply(0:14, function(x){
  mapply(function(y,z){
    interval((date2+days(x)+minutes(y)), (date2+days(x)+minutes(y+z)))
  }, y = seq(0,1380,60), rep(c(60),24), SIMPLIFY = FALSE)
})  

要求是創建一個具有cols和row以及1和0的矩陣。 如果行間隔在列間隔中則為1,否則為0

間隔由startstart日期, .Data :間隔持續時間的秒數和tzone :時區組成。

假設您的tzone穩定,則只需重構要比較的兩個間隔的開始日期,並檢查一個間隔在第二個間隔之后開始並在第二個間隔之前結束。

例:

    isIncluded <- function(a,b){
      (a[[1]]@start>=b[[1]]@start & (a[[1]]@start+seconds(a[[1]]@.Data))<=(b[[1]]@start+seconds(b[[1]]@.Data)))
    }

 library(lubridate)    

date1<-ymd_hms("2000-01-01 05:30:00",tz = "US/Eastern")  
date2<- ymd_hms("2000-01-01 00:00:00",tz = "US/Eastern")

cols <- lapply(0:14, function(x){
  mapply(function(y,z){
    interval((date1+days(x)+minutes(y)), (date1+days(x)+minutes(y+z)))
  }, y = c(0,150,420,600,720,840,1080), z = c(600,570,600,600,600,600,600), SIMPLIFY = FALSE)
})

rows <- lapply(0:14, function(x){
  mapply(function(y,z){
    interval((date2+days(x)+minutes(y)), (date2+days(x)+minutes(y+z)))
  }, y = seq(0,1380,60), rep(c(60),24), SIMPLIFY = FALSE)
})  
    x <- cols[[1]][1]
    y <- cols[[1]][2]
    isIncluded(x,y) ## Is included x in y? False
    isIncluded(x,x) ## Is included x in x? True

The rest is just populating the matrix!
Best!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM