请帮忙,因为我有一个大型数据库的csv文件,日期列有各种格式的日期,如20080408
或2008/04/08
或08/04/2008
。如何将这些格式更改为一种格式dd/mm/yyyy
。在R编程中
答案 0 :(得分:2)
您可以通过lubridate
dmy
和mdy
次转化进行失败测试(因此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
所有格式选项。