当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


R lubridate interval 用于创建和操作 Interval 对象的实用程序


interval() 创建具有指定开始日期和结束日期的 Interval 对象。如果开始日期早于结束日期,则间隔将为正值。否则,它将是负面的。从 v1.7.2 开始支持 ISO 8601 格式的字符向量。

int_start() /int_end()int_start<-() /int_end<-() 分别是间隔的开始/结束日期的"accessors" 和"setters"。

int_flip() 颠倒间隔中开始日期和结束日期的顺序。新间隔发生在与原始间隔相同的时间跨度内,但方向相反。

int_shift() 将时间间隔的开始日期和结束日期在时间轴上移动指定的量。请注意,如果间隔由 period 对象移动,则这可能会更改间隔的确切长度。由 Duration 或 difftime 对象移动的间隔将保留其精确的长度(以秒为单位)。

int_overlaps() 测试两个间隔是否重叠。

int_standardize() 确保区间对象中的所有区间均为正数。如果间隔不为正,则翻转它,使其保留其端点但变为正。

int_aligns() 测试两个间隔是否共享一个端点。每个间隔的方向被忽略。 int_align测试每个间隔的最早或最晚时刻是否同时出现。

int_diff() 返回日期时间向量的元素之间出现的间隔。 int_diff()diff() 的 POSIXt 和 Date 方法类似,但返回 Interval 对象而不是 difftime 对象。

用法

interval(start = NULL, end = NULL, tzone = tz(start))

start %--% end

is.interval(x)

int_start(int)

int_start(int) <- value

int_end(int)

int_end(int) <- value

int_length(int)

int_flip(int)

int_shift(int, by)

int_overlaps(int1, int2)

int_standardize(int)

int_aligns(int1, int2)

int_diff(times)

参数

start, end

POSIXt、日期或字符向量。当 start 是字符向量且结尾为 NULL 时,假定采用 ISO 8601 规范,但对日期和周期进行更宽松的 lubridate 样式解析(请参阅示例)。

tzone

显示时间间隔的公认时区

x

一个 R 对象

int

区间对象

value

间隔的开始/结束分配给int

by

要移动的周期或持续时间对象(对于 int_shift )

int1

一个 Interval 对象(对于 int_overlaps()int_aligns() )

int2

一个 Interval 对象(对于 int_overlaps()int_aligns() )

times

POSIXct、POSIXlt 或 Date 类日期时间的向量(对于 int_diff() )

interval() -- Interval 对象。

int_start()int_end() 在用作访问器时返回 POSIXct 日期对象。用作二传手时什么也没有。

int_length() -- 间隔的数字长度(以秒为单位)。负数表示负区间。

int_flip() -- 翻转区间对象

int_shift() -- 一个 Interval 对象

int_overlaps() -- 逻辑,如果 int1 和 int2 重叠至少一秒,则为 TRUE。否则为假

int_aligns() -- 逻辑,如果 int1 和 int2 在同一时刻开始或结束,则为 TRUE。否则为假

int_diff() -- 包含 n 个日期时间之间的 n-1 个间隔的间隔对象

细节

间隔是受两个实际日期时间约束的时间跨度。使用 as.period()as.duration() 可以将间隔准确地转换为周期或持续时间对象。由于间隔锚定到固定的时间历史记录,因此可以计算经过的确切秒数以及间隔期间发生的可变长度时间单位的数量。

也可以看看

例子

interval(ymd(20090201), ymd(20090101))
#> [1] 2009-02-01 UTC--2009-01-01 UTC

date1 <- ymd_hms("2009-03-08 01:59:59")
date2 <- ymd_hms("2000-02-29 12:00:00")
interval(date2, date1)
#> [1] 2000-02-29 12:00:00 UTC--2009-03-08 01:59:59 UTC
interval(date1, date2)
#> [1] 2009-03-08 01:59:59 UTC--2000-02-29 12:00:00 UTC
span <- interval(ymd(20090101), ymd(20090201))

### ISO Intervals

interval("2007-03-01T13:00:00Z/2008-05-11T15:30:00Z")
#> [1] 2007-03-01 13:00:00 UTC--2008-05-11 15:30:00 UTC
interval("2007-03-01T13:00:00Z/P1Y2M10DT2H30M")
#> [1] 2007-03-01 13:00:00 UTC--2008-05-11 15:30:00 UTC
interval("P1Y2M10DT2H30M/2008-05-11T15:30:00Z")
#> [1] 2007-03-01 13:00:00 UTC--2008-05-11 15:30:00 UTC
interval("2008-05-11/P2H30M")
#> [1] 2008-05-11 UTC--2010-11-11 02:00:00 UTC

### More permisive parsing (as long as there are no intermittent / characters)
interval("2008 05 11/P2hours 30minutes")
#> [1] 2008-05-11 UTC--2008-05-11 02:30:00 UTC
interval("08 05 11/P 2h 30m")
#> [1] 2008-05-11 UTC--2010-11-11 02:00:00 UTC

is.interval(period(months = 1, days = 15)) # FALSE
#> [1] FALSE
is.interval(interval(ymd(20090801), ymd(20090809))) # TRUE
#> [1] TRUE
int <- interval(ymd("2001-01-01"), ymd("2002-01-01"))
int_start(int)
#> [1] "2001-01-01 UTC"
int_start(int) <- ymd("2001-06-01")
int
#> [1] 2001-06-01 UTC--2002-01-01 UTC

int <- interval(ymd("2001-01-01"), ymd("2002-01-01"))
int_end(int)
#> [1] "2002-01-01 UTC"
int_end(int) <- ymd("2002-06-01")
int
#> [1] 2001-01-01 UTC--2002-06-01 UTC
int <- interval(ymd("2001-01-01"), ymd("2002-01-01"))
int_length(int)
#> [1] 31536000
int <- interval(ymd("2001-01-01"), ymd("2002-01-01"))
int_flip(int)
#> [1] 2002-01-01 UTC--2001-01-01 UTC
int <- interval(ymd("2001-01-01"), ymd("2002-01-01"))
int_shift(int, duration(days = 11))
#> [1] 2001-01-12 UTC--2002-01-12 UTC
int_shift(int, duration(hours = -1))
#> [1] 2000-12-31 23:00:00 UTC--2001-12-31 23:00:00 UTC
int1 <- interval(ymd("2001-01-01"), ymd("2002-01-01"))
int2 <- interval(ymd("2001-06-01"), ymd("2002-06-01"))
int3 <- interval(ymd("2003-01-01"), ymd("2004-01-01"))

int_overlaps(int1, int2) # TRUE
#> [1] TRUE
int_overlaps(int1, int3) # FALSE
#> [1] FALSE
int <- interval(ymd("2002-01-01"), ymd("2001-01-01"))
int_standardize(int)
#> [1] 2001-01-01 UTC--2002-01-01 UTC
int1 <- interval(ymd("2001-01-01"), ymd("2002-01-01"))
int2 <- interval(ymd("2001-06-01"), ymd("2002-01-01"))
int3 <- interval(ymd("2003-01-01"), ymd("2004-01-01"))

int_aligns(int1, int2) # TRUE
#> [1] TRUE
int_aligns(int1, int3) # FALSE
#> [1] FALSE
dates <- now() + days(1:10)
int_diff(dates)
#> [1] 2023-02-15 11:55:03 UTC--2023-02-16 11:55:03 UTC
#> [2] 2023-02-16 11:55:03 UTC--2023-02-17 11:55:03 UTC
#> [3] 2023-02-17 11:55:03 UTC--2023-02-18 11:55:03 UTC
#> [4] 2023-02-18 11:55:03 UTC--2023-02-19 11:55:03 UTC
#> [5] 2023-02-19 11:55:03 UTC--2023-02-20 11:55:03 UTC
#> [6] 2023-02-20 11:55:03 UTC--2023-02-21 11:55:03 UTC
#> [7] 2023-02-21 11:55:03 UTC--2023-02-22 11:55:03 UTC
#> [8] 2023-02-22 11:55:03 UTC--2023-02-23 11:55:03 UTC
#> [9] 2023-02-23 11:55:03 UTC--2023-02-24 11:55:03 UTC
源代码:R/intervals.r

相关用法


注:本文由纯净天空筛选整理自Hadley Wickham等大神的英文原创作品 Utilities for creation and manipulation of Interval objects。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。