R POSIXct对象评估中的不连续性
我有一个带有日期和时间的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中造成问题。因此,我不知道是否可以强
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.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