r语言 - 转换为标准的as.日期-日期-时间,然后再返回,不带前导零



是否有可能从R的默认日期格式转换为用户定义的格式(这里的"m/d/yyyy")并避免在结果日期中获得前导零?在下面的例子中,我想让date_2看起来和date_1一样。是否有一种方法可以使用format或其他函数(理想情况下在一行代码中)做到这一点,或者我需要求助于gsub来查找并删除date_2中月份("09")和日期("05")前面的前导零?

我查看了DateTimeClasses, strptime, POSIXctformat的文档,但没有找到答案。

date_1<-"9/5/2008"
date_num<-as.Date(date_1,"%m/%d/%Y")
> date_num
[1] "2008-09-05"
date_2<-format(date_num,"%m/%d/%Y")
date_2
[1] "09/05/2008"

我们可以使用gsub

gsub('(?<=\/)0|^0', '', date_2, perl=TRUE)
#[1] "9/5/2008"

或者另一个版本是

gsub('0(?=[1-9]\/)', '', date_2, perl=TRUE)
#[1] "9/5/2008"

我们也可以转换为POSIXlt类,然后提取组件,paste它。

v1 <- as.POSIXlt(date_num)
paste(v1$mon+1L, v1$mday, v1$year+1900, sep='/')
#[1] "9/5/2008"

这里有一个直接从date_num到您想要的结果的方法,使用chron包。

paste(chron::month.day.year(date_num), collapse = "/")
# [1] "9/5/2008"

这也适用于多个日期。代码略有不同,因为我们在这里需要do.call()

do.call(paste, c(chron::month.day.year(Sys.Date()-0:3), sep = "/"))
# [1] "10/9/2015" "10/8/2015" "10/7/2015" "10/6/2015"

最新更新