2014-03-05 58 views
3

我在计算从.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天,但由于某种原因读取日期错误。

+0

您的问题是不可重现。在将它传递给'as.Date'之前,你是否尝试过强迫这个因素? –

回答

6
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年的日期。

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"