在 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
我需要将日期时间对象附加到我的 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