从两种不同的日期格式中提取年份

时间:2016-07-26 01:16:09

标签: r date

我有专栏x,它有两种不同的日期格式12/31/199812/--/98。如您所见,第二种格式date缺失,year为2位数。

我需要从列中的所有日期中提取year。因此,当我使用Year<- data.frame(format(df$x, "%Y"))时,它会返回year作为第一种格式。对于第二种格式,它返回NA

我将非常感谢所有的帮助。感谢。

2 个答案:

答案 0 :(得分:3)

您可以获得一些创意,并为丢失的数据指定一种丑陋的格式,然后保留一个有效的响应:

vals <- c("12/31/1998", "12/--/98")
out <- pmax(
         as.Date(vals, "%m/%d/%Y"),
         as.Date(paste0("01",vals), "%d%m/--/%y"),
         na.rm=TRUE
       )
format(out, "%Y")
#[1] "1998" "1998"

答案 1 :(得分:2)

如果它们都是年份是“/”之后的最后一个数字的格式,则可以使用basename。那么你只需要将2个字符的年份转换为4年的格式:

vals <- c("12/31/1998", "12/--/98", "68", "69")
yrs <- basename(vals)
yrs <- ifelse(nchar(yrs) == 2, format(as.Date(yrs, format = "%y"), "%Y"), yrs)
yrs
# [1] "1998" "1998" "2068" "1969"

问题是它不适用于1969年以前的日期。