将因子(非均匀)转换为R中的日期?

时间:2018-10-10 05:20:22

标签: r date

我的日期格式如下:

12月4日, 12月12日, 2014年7月30日, 16年3月, 2016年2月29日, 2017年5月, 14年11月20日,

R将其视为因子变量。我希望它像日期一样对待它,并且无论日期中缺少哪一天,都应将其替换为1st。

提前谢谢!

2 个答案:

答案 0 :(得分:1)

我认为我们需要分别解析它们,因为格式不一致。我们首先解析具有日期,月份和年份组成部分的那些。然后,通过向返回NA的对象添加“ 01”来对其进行解析。

new_x <- as.Date(x, "%d-%b-%y")

new_x[is.na(new_x)] <- as.Date(paste0("01-", x[is.na(new_x)]), "%d-%b-%y")

new_x

#[1] "2012-04-01" "2012-12-01" "2014-07-30" "2016-03-01" "2016-02-29" "2017-05-01"
#[7] "2014-11-20"

?strptime上了解有关格式的更多信息。

数据

x <-factor(c("Apr-12", "Dec-12", "30-Jul-14", "Mar-16", "29-Feb-16",
            "May-17","20-Nov-14"))

答案 1 :(得分:1)

如果前三个字符不在系统向量month.abb中,则有条件地附加一个“ 01-”

as.Date( ifelse( substr(dtvec,1,3) %in% month.abb, paste0("01-",dtvec), dtvec) ,"%d-%b-%y")
[1] "2012-04-01" "2012-12-01" "2014-07-30" "2016-03-01" "2016-02-29" "2017-05-01" "2014-11-20"