R解析形式%m%d%Y的时间戳,没有前导零

时间:2014-09-13 01:01:46

标签: r date

我的数据时间戳为%m%d%Y,没有前导零。

时间戳示例:

112001
1112001

所需的解析

January 1 2001
January 11 2001 or November 1 2001 based on context

时间戳按顺序排列。是否可以解析这些数据?

3 个答案:

答案 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;实现起来并不简单,你可能想避免这种方式。