我在数据框中有一列,其中包含以多种形式存储的日期信息,例如
dob <- c("18/02/1983","36782","01/11,1999 11:55",
"Dead 12/12/2001","Alive 03/07/1985")
Run Code Online (Sandbox Code Playgroud)
我想将所有这些转换为POSIXlt格式的日期"%d/%m/%Y",没有时间信息,也没有"Dead"或没有"Alive"前缀。
以前对类似问题的所有解决方案都只涉及两种可能的格式,我可以告诉,而我有更多,而且我还有转换 5 位数字格式日期的问题(我认为是起源于 1970-01-01 的数字日期)来自 Excel)也。我正在使用 R-3.1.2。任何帮助将不胜感激!
lubridate就日期格式而言是灵活的。
根据 5 个日期的样本在较大数据集中的代表性,您可以对它们进行一次解析以过滤掉通常为日-月-年的日期。然后,假设其余部分是可疑的 Excel 日期,根据它们的正确来源分别解析它们(警告,这可能取决于创建 Excel 文件的操作系统)。
library(lubridate)
d <- parse_date_time(dob, c('%d%m%y', '%d%m%y %H%M'))
d[is.na(d)] <- as.POSIXct(as.Date(as.numeric(dob[is.na(d)]),
origin = "1899-12-30"))
d
## [1] "1983-02-18 00:00:00 UTC" "2000-09-13 00:00:00 UTC" "1999-11-01 11:55:00 UTC"
## [4] "2001-12-12 00:00:00 UTC" "1985-07-03 00:00:00 UTC"
Run Code Online (Sandbox Code Playgroud)
AFAIK 你不能省略POSIXlt/POSIXct对象的时间信息,所以如果你想这样做,你可能需要:
as.Date(d)
Run Code Online (Sandbox Code Playgroud)
其格式为%d-%m-%Y(在我的语言环境中),
或者
format(d, '%d/%m/%Y')
Run Code Online (Sandbox Code Playgroud)
这将是character。