两个时间间隔:[1,6]和[6,12]。 6号属于第二个但不属于第一个。同样可以在lubridate中完成吗? (This处理Python中的问题...)
library(lubridate)
date1 <- ymd(20010101); date3 <- ymd(20010103); date6 <- ymd(20010106); date12 <- ymd(20010112)
intA <- new_interval(date1, date6); intB <- new_interval(date6, date12)
date3 %within% intA
> TRUE
date3 %within% intB
> FALSE
date6 %within% intB ## I want this to be true
> TRUE
date6 %within% intA ## but this be false...
> TRUE
可以调整%%内的函数%以排除间隔的上限吗?
任何帮助将不胜感激。
答案 0 :(得分:2)
您可以定义在intA
之前1秒结束的date6
间隔:
intA <- new_interval(date1, date6-1)
date6 %within% intA
#[1] FALSE
答案 1 :(得分:2)
当然可以。我搜索lubridate on github以找到%within%
的定义位置。对代码进行一些调整(将<=
更改为<
):
"%my_within%" <- function(a,b) standardGeneric("%my_within%")
setGeneric("%my_within%")
setMethod("%my_within%", signature(b = "Interval"), function(a,b){
if(!is.instant(a)) stop("Argument 1 is not a recognized date-time")
a <- as.POSIXct(a)
(as.numeric(a) - as.numeric(b@start) < b@.Data) & (as.numeric(a) - as.numeric(b@start) >= 0)
})
setMethod("%my_within%", signature(a = "Interval", b = "Interval"), function(a,b){
a <- int_standardize(a)
b <- int_standardize(b)
start.in <- as.numeric(a@start) >= as.numeric(b@start)
end.in <- (as.numeric(a@start) + a@.Data) < (as.numeric(b@start) + b@.Data)
start.in & end.in
})
date3 %my_within% intA
> TRUE
date3 %my_within% intB
> FALSE
date6 %my_within% intB ## I want this to be true
> TRUE
date6 %my_within% intA ## False, as desired!
> FALSE