R提取日期和时间信息

时间:2015-07-27 08:58:43

标签: r date as.date

我有一个看起来像这样的data.frame:

> df1
   Date         Name    Surname   Amount
2015-07-24      John     Smith     200

我想将Date中的所有信息外推到新列中,所以我可以达到这个目的:

> df2
   Date     Year  Month   Day    Day_w      Name    Surname   Amount
2015-07-24  2015    7     24    Friday      John     Smith     200

所以现在我想要一周,一个月,一天和一周。我怎样才能做到这一点?当我尝试使用as.Date首先使变量成为日期时,data.frame变得混乱并且Date all变为NA(并且没有新列)。谢谢你的帮助!

2 个答案:

答案 0 :(得分:3)

这是一个简单而有效的解决方案,使用devel版本的data.table及其新的tstrsplit函数,它只执行一次拆分操作,并且还会更新您的数据集放置

library(data.table)
setDT(df1)[, c("Year", "Month", "Day", "Day_w") := 
             c(tstrsplit(Date, "-", type.convert = TRUE), wday(Date))]
df1
#          Date Name Surname Amount Year Month Day Day_w
# 1: 2015-07-24 John   Smith    200 2015     7  24     6

请注意,我使用了工作日的数字表示,因为wday包中有一个高效的内置data.table函数,但如果您确实需要,可以轻松调整它改为使用format(as.Date(Date), format = "%A")

要安装devel版本,请使用以下

library(devtools)
install_github("Rdatatable/data.table", build_vignettes = FALSE)

答案 1 :(得分:1)

也许这会有所帮助:

df2 <- df1
dates <- strptime(as.character(df1$Date),format="%Y-%m-%d")
df2$Year <- format(dates, "%Y")
df2$Month <- format(dates, "%m")
df2$Day <- format(dates, "%d")
df2$Day_w <- format(dates, "%a")

之后,您可以根据需要重新排列df2中列的顺序。