我的数据时间戳为%m%d%Y,没有前导零。
时间戳示例:
112001
1112001
所需的解析
January 1 2001
January 11 2001 or November 1 2001 based on context
时间戳按顺序排列。是否可以解析这些数据?
答案 0 :(得分:2)
有可能,但我认为需要先做一些工作。这与@hrbrmstr的前提相同,我认为能够解析这些日期需要做些什么。
> x <- c("112001", "1112001")
> x1 <- ifelse(substring(x, 1, 1) != 0, paste0(0, x), x)
> x2 <- ifelse(nchar(x1) == 7 & substring(x1, 3, 3) != 0,
paste0(substring(x1, 1, 2), 0, substring(x1, 3)), x1)
> library(lubridate)
> parse_date_time(x2, "mdy")
[1] "2001-01-01 UTC" "2001-01-11 UTC"
答案 1 :(得分:1)
这将是按长度对这些日期字符串的基本逻辑处理。您需要为&#34; context&#34;添加逻辑,因为我们不知道这些是如何构建的。我把它们放在一个矢量中,例如:
dates <- c(112001, 1112001)
lapply(dates, function(x) {
x <- as.character(x)
if (nchar(x) == 6) {
as.Date(sprintf("0%s0%s%s", substr(x,1,1), substr(x,2,2), substr(x,3,6)), format="%m%d%Y")
} else if (nchar(x) == 7) {
as.Date(sprintf("0%s%s%s", substr(x,1,1), substr(x,2,3), substr(x,4,7)), format="%m%d%Y")
} else {
as.Date(x, format="%m%d%Y")
}
})
## [[1]]
## [1] "2001-01-01"
##
## [[2]]
## [1] "2001-01-11"
答案 2 :(得分:0)
您可以使用strptime
以固定格式从字符串表示中parse a date。然后,您可以使用strftime
将结果转换为其他表示形式。
您希望支持非独特的可解析格式,并根据上下文决定&#34;实现起来并不简单,你可能想避免这种方式。