更改R中数据框中某些POSIXct条目的时区

时间:2015-06-25 16:43:37

标签: r timezone posixct

我无法更改POSIXct对象的时区。遵循以下建议: Change timezone in a POSIXct object

我试过

> test
    timestamp            dttm_utc   value estimated anomaly SITE_ID
954157 1328043600 2012-02-01 00:00:00 16.4803         0      NA      31
954158 1328043900 2012-02-01 00:05:00 16.4364         0      NA      31
> attributes(test[2,2])$tzone
     TIME_ZONE 
"America/New_York" 
> attributes(test[2,2])$tzone <- "America/Los_Angeles"
> attributes(test[2,2])$tzone
     TIME_ZONE 
"America/New_York" 

为什么这不起作用?我该如何解决这个问题?

1 个答案:

答案 0 :(得分:4)

问题是tzone是整个向量的属性。每个元素都不能拥有自己的时区。您可以更改整个矢量的时区。考虑这个例子

x<-as.POSIXct(c("2012-02-01 00:00:00","2012-02-01 00:05:00"), tz="America/New_York")
attributes(x[1])$tzone
# [1] "America/New_York"

# does not change
attributes(x[1])$tzone<-"America/Los_Angeles"
attributes(x[1])$tzone
# [1] "America/New_York"

#changes
attributes(x)$tzone<-"America/Los_Angeles"
attributes(x[1])$tzone
# [1] "America/Los_Angeles"

如果您有来自不同时区的日期,您可以使用UTC偏移指定时区,然后将它们全部转换为公共时区

x<-as.POSIXct(c("2012-02-01 00:00:00-0800","2012-02-01 00:05:00-0500"), 
    format="%Y-%m-%d %H:%M:%S%z", tz="America/Los_Angeles")
# [1] "2012-02-01 00:00:00 PST" "2012-01-31 21:05:00 PST"