在R

时间:2015-06-04 20:27:56

标签: r date datetime dataframe

我是R的新手,我是一名狂热的SAS程序员,我只是在困难时间环绕着我。

在数据框架中,我的日期时间列的格式为POSIXITct,其中列显示为"2013-01-01 00:53:00"。我想使用提取日期的函数和提取小时的列来创建日期列。在理想的世界中,我希望能够在数据框中提取日期,年,日,月,时间和小时,以在数据框中创建这些附加列。

1 个答案:

答案 0 :(得分:4)

谨慎对待as.Date(as.POSIXct(...))

是明智的

例如,对我来说,澳大利亚:

df <- data.frame(dt=as.POSIXct("2013-01-01 00:53:00"))
df
#                   dt
#1 2013-01-01 00:53:00

as.Date(df$dt)
#[1] "2012-12-31"

你会发现这是有问题的,因为日期不匹配。如果POSIXct对象不在UTC时区,as.Date默认为tz="UTC",则会遇到问题。有关详细信息,请参阅此处:as.Date(as.POSIXct()) gives the wrong date?
为了安全起见,您可能需要匹配您的时区:

as.Date(df$dt,tz=Sys.timezone()) #assuming you've just created df in the same session:
#[1] "2013-01-01"

或更安全的选项#1:

df <- data.frame(dt=as.POSIXct("2013-01-01 00:53:00",tz="UTC"))
as.Date(df$dt)
#[1] "2013-01-01"

或更安全的选项#2:

as.Date(df$dt,tz=attr(df$dt,"tzone"))
#[1] "2013-01-01"

或者使用format提取POSIXct对象的部分内容:

as.Date(format(df$dt,"%Y-%m-%d"))
#[1] "2013-01-01"
as.numeric(format(df$dt,"%Y"))
#[1] 2013
as.numeric(format(df$dt,"%m"))
#[1] 1
as.numeric(format(df$dt,"%d"))
#[1] 1