我正在尝试使用xlsx
包将带有日期列的数据框导出到Excel。 write.xlsx()
的帮助文件说明了格式化日期列的方法。我尝试按照下面的方法,但生成的Excel文件没有显示正确的格式。我可以手动将Excel中的单元格格式更改为自定义日期,但这是一个额外的步骤,使其不可重现。
library(lubridate)
library(xlsx)
dat <- data.frame(dates=c("2014-07-16 15:03:16", "2014-07-16 14:52:03", "2014-07-16 16:50:38", "2014-07-12 00:00:00", "2014-07-12 00:00:00"))
dat$dates <- ymd_hms(dat$dates)
wb <- createWorkbook()
saveWorkbook(wb, "output.xlsx")
oldOpt <- options()
options(xlsx.date.format="yyyy-mm-dd HH:mm:ss") # change date format
write.xlsx(dat,
"output.xlsx",
sheetName="output")
options(oldOpt) # revert back to defaults
答案 0 :(得分:4)
由于日期列类型为POSIXct
,因此您应使用xlsx.datetime.format
代替xlsx.date.format
(仅对Date
类型的列有效。)
但是,由于xlsx包中的类检查中存在错误,它仍然无效。实际上,查看代码时,会执行此检查:
indDT <- which(sapply(y, class) == "POSIXct")
失败,因为POSIXct
也继承自POSIXt
。也许正确的检查应该是:
indDT <- which(sapply(y, FUN=function(x) any(class(x) == "POSIXct")))
无论如何,你可以通过这样做来解决这个问题:
dat$dates <- ymd_hms(dat$dates)
class(dat$dates) <- "POSIXct"
当然设置xlsx.datetime.format
而不是xlsx.date.format