我试图将CSV文件中的一列数据格式化为R中的日期。
本专栏中的元素示例是" 6182012"和分别于2012年6月18日和2013年12月10日的" 12102013"。它们具有整数类型,格式为[month, without leading zeros][day][year]
。
然而,我似乎无法让R识别日期。我试过了:
>>> date.int <- 6182012
>>> as.Date(date.int, format="%m%d%Y")
Error in charToDate(x) :
character string is not in a standard unambiguous format
>>> as.Date(as.character(date.int), format="%m%d%Y")
NA
我不确定为什么第一次尝试不使用我传递的格式字符串,而是尝试使用标准日期格式。我认为这是一个类型问题。
我最好的猜测,为什么第二次尝试不起作用的是,没有一个月有前导零(&#34; 6&#34;而不是&#34; 06&#34;),而约会都做。
我的问题是:是否有一种简单的方法可以传递as.Date
格式字符串,并考虑到这一点?
我认为这个问题几个月没有领先零,所以我只添加了一个:
add.zero <- function(dt) {
if (nchar(dt) == 7){
return(paste("0", dt, sep=""))
} else {
return(dt)
}
}
add.zero(as.character(date.int))
# or, if you have a vector of dates
dates.formatted <- unlist(lapply(dates, add.zero))
答案 0 :(得分:1)
date.int <- c(6182012, 12102013)
在上面的date.int
中,位数不同(7&amp; 8)。为了使所有元素的位数相同,您可以使用formatC
或sprintf
在元素缺少8位数时粘贴前导0
。在这里,我们使用sprintf
。
as.Date(sprintf("%08d", date.int), '%m%d%Y')
#[1] "2012-06-18" "2013-12-10"
答案 1 :(得分:1)
以下是格式化字符串的其他几种方法
x <- c(6182012, 12102013)
as.Date(chartr(" ", "0", format(x, FALSE)), "%m%d%Y")
# [1] "2012-06-18" "2013-12-10"
as.Date(formatC(x, 8, 0, "d", 0), "%m%d%Y")
# [1] "2012-06-18" "2013-12-10"