2014-03-05 54 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"