如何更改20080408或2008/04/08或08/04/2008等任何格式的日期

时间:2014-04-23 13:43:30

标签: r date

请帮忙,因为我有一个大型数据库的csv文件,日期列有各种格式的日期,如200804082008/04/0808/04/2008。如何将这些格式更改为一种格式dd/mm/yyyy。在R编程中

3 个答案:

答案 0 :(得分:2)

您可以通过lubridate dmymdy次转化进行失败测试(因此suppressWarnings()来电。我不认为你会去如果"08/04/2008"应该是“日”组件,那么能够确保正确处理08之类的事情,因为这些函数无法读取思想。

library(lubridate)

dat <- c("20080408", "2008/04/08", "08/04/2008")

dat.1 <- unlist(lapply(dat, function(x) {

  suppressWarnings(res <- mdy(x))
  if (is.na(res)) { suppressWarnings(res <- ymd(x)) }
  return(as.character(res))

}))

dat.1
## [1] "2008-04-08" "2008-04-08" "2008-08-04"

答案 1 :(得分:1)

以下内容适用于您的data.frame。您可能需要将日期列转换为类as.character,以便字符串拆分函数strsplit正常工作。之后,循环只是简单地计算第一个&#34; /&#34;之前字符串中的字符数。字符,并相应地调整格式。

实施例

df <- data.frame(DATE=as.character(c("20080408", "2008/04/08", "08/04/2008")), DATE2=as.Date(NA))
df$DATE=as.character(df$DATE)

for(i in seq(df$DATE)){
    sp <- unlist(strsplit(df$DATE[i], "/"))
    if(nchar(sp[1]) == 8){
        df$DATE2[i] <- as.Date(df$DATE[i], format="%Y%m%d")
    }   
    if(nchar(sp[1]) == 4){
        df$DATE2[i] <- as.Date(df$DATE[i], format="%Y/%m/%d")
    }
    if(nchar(sp[1]) == 2){
        df$DATE2[i] <- as.Date(df$DATE[i], format="%d/%m/%Y")
    }
}

结果:

df
#        DATE      DATE2
#1   20080408 2008-04-08
#2 2008/04/08 2008-04-08
#3 08/04/2008 2008-04-08

答案 2 :(得分:0)

您可以将其视为character值并使用as.Date转换它们。

x1 <- '20080408'     ## class character (string)
x2 <- '2008/04/08'
x1.dt <- as.Date(x1, format='%Y%m%d')
x2.dt <- as.Date(x2, format='%Y/%m/%d')   ## different format
print(c(x1, x2), format='%d/%m/%Y')       ## you can return Date objects in any format you want

查看?strftime所有格式选项。