我是R的新手,我是一名狂热的SAS程序员,我只是在困难时间环绕着我。
在数据框架中,我的日期时间列的格式为POSIXITct
,其中列显示为"2013-01-01 00:53:00"
。我想使用提取日期的函数和提取小时的列来创建日期列。在理想的世界中,我希望能够在数据框中提取日期,年,日,月,时间和小时,以在数据框中创建这些附加列。
答案 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