将日期作为因素转换为日期不正确

时间:2014-03-05 21:53:33

标签: r date r-factor

我无法计算从.csv文件导入的日期。我想要做的是在DateClosed因子中取这个日期,并在日期字段(a)中生成一个日期。示例如果a = 203我希望日期等于DateClosed-203。但是,我遇到下面列出的代码有问题。

DateClose是一个因素。

> head(DateClosed)
[1] 7/30/2007  12/12/2007 5/8/2009   6/24/2009  6/24/2009  2/29/2008 
165 Levels: 1/12/2010 1/15/2011 1/15/2013 1/17/2009 1/18/2008 1/19/2012 1/2/2013 1/21/2013 1/22/2010 1/24/2013 1/26/2014 ... 9/7/2010
> head(as.Date(DateClosed,format="%m/%d/%y"))
[1] "2020-07-30" "2020-12-12" "2020-05-08" "2020-06-24" "2020-06-24" "2020-02-29"

 head(as.Date(DateClosed,format="%m/%d/%y"))-203
[1] "2020-01-09" "2020-05-23" "2019-10-18" "2019-12-04" "2019-12-04" "2019-08-10"

它正确地减去了203天但由于某种原因错误地读取了日期。

2 个答案:

答案 0 :(得分:7)

DateClosed <- factor(c("7/30/2007","12/12/2007", "5/8/2009"))
as.Date(DateClosed, format="%m/%d/%Y")

产地:

[1] "2007-07-30" "2007-12-12" "2009-05-08"

注意format param中的大写字母“Y”。小写“y”表示2位数年份,因此as.Date读取年份标记的前两位数字(“20”),然后假设它仅指年份的最后两位数字,并添加当前日期的世纪(也是“20”),所以你最终会在2020年结束日期。

答案 1 :(得分:0)

使用lubridate包来操作日期变得非常简单。

mdy(factor(c("7/30/2007","12/12/2007", "5/8/2009")))

"2007-07-30 UTC" "2007-12-12 UTC" "2009-05-08 UTC"

或者使用parse_date_time使用相同的包:

parse_date_time(factor(c("7/30/2007","12/12/2007", "5/8/2009")),c('mdY'))
[1] "2007-07-30 UTC" "2007-12-12 UTC" "2009-05-08 UTC"