在 POSIXct 上附加一个日期时间对象

append a datetime object on POSIXct

我需要将日期时间对象附加到我的 POSIXct 元素。一些示例数据:

my_chr<-c('2017-02-19 06:00','2017-03-10 06:00','2017-04-15 06:00')
myPSX<-as.POSIXct(my_chr,format='%Y-%m-%d %H:%M',tz='UTC')
PSXappend<-as.POSIXct('2017-08-09 06:00',format='%Y-%m-%d %H:%M',tz='UTC')

但是不知何故,如果我尝试 c() 它会改变时区。如果我尝试将它与 as.POSIXct 一起强制使用,它会删除我需要附加的日期时间对象。

在这种情况下,您可以通过索引附加一个值,这既不会更改时区,也不会更改 myPSX 的 class:

myPSX[length(myPSX) + 1] <- PSXappend

因为我必须 运行 在相当大的数据集上,我 运行 一些基准来比较不同的可能性。实际上@Dan 的解决方案非常快。但是,使用 attr(dttm,'tzone')<-'UTC' 会稍微快一些。

myfun1<-function(){
myPSX[length(myPSX) + 1] <- PSXappend
}

myfun2<-function(){
dttm<-c(myPSX,PSXappend)
attr(dttm,'tzone')<-'UTC'
}

library(lubridate)
myfun3<-function(){
dttm<-c(myPSX,PSXappend)
with_tz(dttm, "UTC")
}

myfun4<-function(){
dttm<-as.POSIXct(c(my_chr,'2017-08-09 06:00'),format='%Y-%m-%d %H:%M',tz='UTC')
}

microbenchmark::microbenchmark(myfun1(),myfun2(),myfun3(),myfun4())
Unit: microseconds
     expr    min     lq      mean  median      uq      max neval
 myfun1() 12.642 15.210  17.92005 16.9875 17.7780   59.654   100
 myfun2() 11.852 13.827  16.39909 14.4200 15.8025   43.062   100
 myfun3() 26.864 29.432 121.86874 30.8150 33.1850 5852.844   100
 myfun4() 31.605 34.766  61.66142 36.3460 40.2970 2182.323   100