sve*_*son 4 time r concatenation posixct
我有一个我试图使用的日期列表,Reduce并意识到当我合并矢量时,小时数正在改变.这是一个例子:
x = structure(1315714440, tzone = "UTC", class = c("POSIXct", "POSIXt"))
y = structure(1325832660, tzone = "UTC", class = c("POSIXct", "POSIXt"))
x
[1] "2011-09-11 04:14:00 UTC"
y
[1] "2012-01-06 06:51:00 UTC"
c(x,y)
[1] "2011-09-11 00:14:00 EDT" "2012-01-06 01:51:00 EST"
Run Code Online (Sandbox Code Playgroud)
为什么会这样?对替代品的任何建议?
谢谢!
c.POSIXct删除时区属性.来自?c.POSIXct:
c在"POSIXct"对象上使用[...] 会删除任何"tzone"属性(即使它们都标有相同的时区).
因此,在您之后c(x,y),您可以UTC使用以下方法恢复原始时区attr:
xy <- c(x, y)
attr(xy, "tzone") <- "UTC"
xy
# [1] "2011-09-11 04:14:00 UTC" "2012-01-06 06:51:00 UTC"
Run Code Online (Sandbox Code Playgroud)
更多Ripley的背景:
"我们考虑c()保留时区,如果它对所有对象都是通用的,但主要问题c()是记录了删除属性:
c有时用于删除除名称之外的属性的副作用,例如将数组转换为向量.as.vector这是一种更直观的方式,但也会删除名称.另请注意,除了默认方法之外的方法不需要这样做(并且它们几乎肯定会保留一个类属性).
因此,有时删除和有时保留属性会让人感到困惑.
但无论如何,文档(?c.POSIXct)很明确:
使用
c"POSIXlt"对象将它们转换为当前时区,而"POSIXct"对象将删除任何"tzone"属性(即使它们都标记有相同的时区).
所以推荐的方法是添加一个" tzone"属性,如果你知道你想要它. POSIXct对象是绝对时间:时区仅影响它们的转换方式(包括打印字符)."
如@aosmith所述,rbind可以用作解决方法: