【发布时间】:2019-03-06 21:40:46
【问题描述】:
我正在操纵三个date objects (class : "POSIXlt" "POSIXt")。前两个向量(start 和 end)定义了一些区间的起点和终点,第三个向量(inc)对应于一些事件。我想检测的是,哪个事件发生在哪个时间间隔内。我减小了向量的大小以提供一个工作示例。否则,向量的实际长度真的很大。
start <- c("2007-09-16 18:40:27 GMT","2007-09-28 23:53:55 GMT", "2007-10-25 05:23:01 GMT")
end <- c("2007-09-19 18:40:27 GMT", "2007-10-01 23:53:55 GMT","2007-10-28 05:23:01 GMT")
inc <- c("2007-09-17 18:45:00 GMT", "2007-09-17 19:00:00 GMT", "2007-09-17 19:15:00 GMT", "2007-09-17 19:30:00 GMT")
这是检测相应日期的简单代码:
quel.eve <- sapply( inc, function(s)
which(start <= s & end >=s) )
当我使用 'which(start =2007-09-17 18:45:00 GMT)' 它工作正常并返回1。只有当我想应用“sapply”时才会出现问题。它给出了一些奇怪的结果:
$sec
integer(0)
$min
integer(0)
$hour
integer(0)
$mday
integer(0)
$mon
integer(0)
$year
integer(0)
$wday
integer(0)
$yday
integer(0)
$isdst
integer(0)
在question 中,我发现由于“POSIXct”本质上已经是一个列表,“sapply”无法处理它。这里提供的向量元素是从我的控制台复制的,这就是它们类似于字符的原因。在我的程序中,它们绝对是“日期”对象。
有没有办法,将它们转换为POSIXct,这样做?我们将不胜感激。
【问题讨论】:
-
数据必须是
date对象(POSIXlt类)。我不必将它们转换为character。 -
不,它们不是,我只是从控制台复制并粘贴了它们。这就是为什么他们在这里似乎是
character。在我的控制台上class(start)给出:"POSIXlt" "POSIXt" -
无法重现。就像@IceCreamToucan 所说,我所要做的就是将输入更改为
start <- as.POSIXlt(c("2007-09-16 18:40:27 GMT", etc)),其他的也一样。然后quel.evereturns[1] 1 1 1 1.