我有日期时间向量与相当不同的条目。有时条目之间的间隔只有几秒钟,有时是几天。就像这样:
# Vector increasing by seconds
time1 <- ymd_hms(c("2023-05-02 14:15:00", "2023-05-02 14:15:01", "2023-05-02 14:15:02"))
# Vector increasing by days
time2 <- ymd_hms(c("2023-05-02 14:15:00", "2023-05-03 14:15:00", "2023-05-04 14:15:00"))
我需要知道所有向量的时差。diff()
的问题是它会自动选择一个时间单位,我们不能设置自己的单位(没有unit
参数):
diff(time1) == diff(time2)
# TRUE
幸运的是,difftime()
函数有一个unit
参数。但是difftime
的问题是它不接受向量:
difftime(time1)
# Error in difftime(time1) : argument "time2" is missing, with no default
有没有一个函数可以计算整个矢量的差异,我们可以在其中设置单位?我猜还有比sapply(seq(1, length(time1)-1, 1), function(i){difftime(time1[i+1], time1[i], units= "sec")})
更优雅的方法吗?
3条答案
按热度按时间2izufjch1#
在base R中,
as.numeric
函数接受一个units =
参数,您可以与diff()
一起使用,以提供输出的灵活性:iezvtpos2#
如果你想要更大的灵活性,你可以使用我的函数
time_diff()
,它使用lubridate
来支持周期时间差和通常的持续时间差。创建于2023-05-04使用reprex v2.0.2
syqv5f0l3#
是的,你可以通过指定time1和time2参数作为相同长度的向量来使用difftime()函数。要使用特定单位计算时差,可以将units参数设置为所需单位。