R POSIXct对象评估中的不连续性

R POSIXct对象评估中的不连续性,r,posix,posixct,R,Posix,Posixct,我有一个带有日期和时间的POSIXct对象向量,其中一个是午夜 v <- as.POSIXct(c("2019-01-01 23:59:00","2019-01-02 00:00:00"), tz="UTC") 但当我单独评估其要素时 > v[1] [1] "2019-01-01 23:59:00 UTC" > v[2] [1] "2019-01-02 UTC" midnight元素被缩短以排除时间,这会在mydata.tablejoin中造成问题。因此,我不知道是否可以强

我有一个带有日期和时间的POSIXct对象向量,其中一个是午夜

v <- as.POSIXct(c("2019-01-01 23:59:00","2019-01-02 00:00:00"), tz="UTC")
但当我单独评估其要素时

> v[1]
[1] "2019-01-01 23:59:00 UTC"
> v[2]
[1] "2019-01-02 UTC"
midnight元素被缩短以排除时间,这会在my
data.table
join中造成问题。因此,我不知道是否可以强迫对其进行全面评估

找到了答案

> strftime(v, format="%Y-%m-%d %H:%M:%S")
[1] "2019-01-01 23:59:00" "2019-01-02 00:00:00" 
> strftime(v[1], format="%Y-%m-%d %H:%M:%S")
[1] "2019-01-01 23:59:00"
> strftime(v[2], format="%Y-%m-%d %H:%M:%S")
[1] "2019-01-02 00:00:00"

将时区设置为系统时区是关键。

好消息:您的数据仍能正确表示。只有
print.POSIXct
方法截断了它。(有问题的代码实际上在
format.POSIXlt
中,因此它只用于在屏幕上呈现数据。)

令人困惑的消息是:如果在您的联接或处理过程中的任何时间强制使用字符,它们将不会打印相同的字符,但当您重新强制使用某个时间时,它们仍将指向同一时间。这是因为如果字符串中没有存储HMS信息,则
as.POSIXct
假定时间为午夜

lapply(as.list(times), as.character)

igraph
的操作超出了我的专业知识范围,但是当您有一个复杂的数据类型时,一个很好的经验法则是尝试将其存储在一个明确的字符串或数字中。时间是存储为整数的一个很好的例子,因为自1970-01-01的Unix起源以来,时间(当前)在引擎盖下表示为秒数。

好消息:您的数据仍然正确表示。只有
print.POSIXct
方法截断了它。(有问题的代码实际上在
format.POSIXlt
中,因此它只用于在屏幕上呈现数据。)

令人困惑的消息是:如果在您的联接或处理过程中的任何时间强制使用字符,它们将不会打印相同的字符,但当您重新强制使用某个时间时,它们仍将指向同一时间。这是因为如果字符串中没有存储HMS信息,则
as.POSIXct
假定时间为午夜

lapply(as.list(times), as.character)

igraph
的操作超出了我的专业知识范围,但是当您有一个复杂的数据类型时,一个很好的经验法则是尝试将其存储在一个明确的字符串或数字中。时间是存储为整数的一个很好的例子,因为它们(目前)在引擎盖下表示为自1970-01-01年Unix起源以来的秒数。

您能给我看一下这两个
数据吗。您想要联接的表,以及您想要用什么命令来联接吗?整个联接包括一个图,它通常被描述为,除此之外,我还使用
as.character(timeA)%chin%名称(子组件(g,as.character(timeB))
。仔细想想,问题可能是由
igraph
子组件(.)
命令引起的。你能给我看一下你想连接的两个
数据表吗?你想用什么命令连接?整个连接包括一个图,它一般都有描述,除了我还使用
作为字符(timeA)%chin%名称(子组件(g,as.character(timeB))
。仔细想想,问题可能是源于
igraph
子组件(.)
命令。
[1] "2019-01-01 23:59:00 EST" "2019-01-01 23:59:59 EST" "2019-01-02 00:00:00 EST"
[4] "2019-01-02 00:00:01 EST"
as.list(times)
[[1]] [1] "2019-01-01 23:59:00 EST"

[[2]] [1] "2019-01-01 23:59:59 EST"

[[3]] [1] "2019-01-02 EST"

[[4]] [1] "2019-01-02 00:00:01 EST"
lapply(as.list(times), class)
[[1]]
[1] "POSIXct" "POSIXt" 

[[2]]
[1] "POSIXct" "POSIXt" 

[[3]]
[1] "POSIXct" "POSIXt" 

[[4]]
[1] "POSIXct" "POSIXt"
lapply(as.list(times), as.numeric)
[[1]]
[1] 1546405140

[[2]]
[1] 1546405199

[[3]]
[1] 1546405200

[[4]]
[1] 1546405201
lapply(as.list(times), as.character)
[[1]]
[1] "2019-01-01 23:59:00"

[[2]]
[1] "2019-01-01 23:59:59"

[[3]]
[1] "2019-01-02"

[[4]]
[1] "2019-01-02 00:00:01"
lapply(lapply(lapply(as.list(times), as.character), as.POSIXct), as.numeric)
[[1]]
[1] 1546405140

[[2]]
[1] 1546405199

[[3]]
[1] 1546405200

[[4]]
[1] 1546405201