2014-05-13 22 views
0

我遇到了使用R中的时间序列&区域的问题,但我无法完全弄清楚如何继续。使用POSIXct时间序列更改时区,R

我有一个这样的时间序列数据:

df <- data.frame( 
    Date  = seq(as.POSIXct("2014-01-01 00:00:00"), length.out = 1000, by = "hours"), 
    price = runif(1000, min = -10, max = 125), 
    wind  = runif(1000, min = 0, max = 2500), 
    temp  = runif(1000, min = - 10, max = 25) 
) 

现在,日期是UTC时间。我想子集/过滤数据,所以比如我今天得到的值(今天是2014年5月13日):

df[ as.Date(df$Date) == Sys.Date(), ] 

然而,当我这样做,我得到的开头数据:

2014-05-13 02:00:00 

而不是:

2014-05-13 00:00:00 

因为在CEST时间,这是UTC时间两个小时后,目前的IM。所以我尝试更改数据:

df$Date <- as.POSIXct(df$Date, format = "%Y-%m-%d %H", tz = "Europe/Berlin") 

然而,这不起作用。我尝试了各种各样的变化,例如将其剥离为字符,然后转换等等,但是我已经将我的头靠在墙上,并且我猜测这里有一些简单的缺失。

+0

退房此线程:https://stat.ethz.ch/pipermail/r-help /2006-March/101179.html –

+0

我试过阅读这个链接和关于TZ的材料,但我仍然无法确定如何完全转换这个系列。我能看到的是,它是依赖于系统的什么工作?到目前为止,我已经通过使用[This SO answer]中的'Sys.setenv(TZ ='GMT')'解决了它(http://stackoverflow.com/questions/6374874/how-to-change-the- default-timezone-in-r) – NoThanks

+1

如何使用'df [format(df $ Date,“%Y-%m-%d”)== Sys.Date(),]' – James

回答

1

要避免使用有这样的时区的问题,使用format来获得日期的字符表示:

df[format(df$Date,"%Y-%m-%d") == Sys.Date(), ]