从R中的datetime创建日期列



我是R的新手,我是一个狂热的SAS程序员,只是很难理解R。

在数据帧中,我有一个格式化为POSIXct的日期时间列,下面的列显示为"2013-01-01 00:53:00"。我想使用提取日期的函数和提取小时的列创建一个日期列。在理想情况下,我希望能够提取数据框架中的日期、年、日、月、时间和小时,以便在数据框架中创建这些附加列。

始终小心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())给出了错误的日期?
为了安全起见,您可能需要匹配您的时区:

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

使用lubridate包。例如,如果dfdata.frame,列dt的类型为POSIXct,则可以:

df$date = as.Date(as.POSIXct(df$dt, tz="UTC"))
df$year = year(df$dt)
df$month = month(df$dt)
df$day = day(df$dt)
# and so on...

如果您可以将数据存储在data.table中,那么这就更容易了:

df[, `:=`(date = as.Date(as.POSIXct(dt, tz="UTC")), year = year(dt), ...)]

相关内容

  • 没有找到相关文章

最新更新