1

我有一个如下所示的 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 全部变为 NA (并且没有新列)。谢谢你的帮助!

4

2 回答 2

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")


为了安装开发版本,请使用以下命令

library(devtools)
install_github("Rdatatable/data.table", build_vignettes = FALSE)
于 2015-07-27T09:36:21.487 回答
2

也许这有帮助:

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

于 2015-07-27T09:35:19.737 回答