2016-05-14 68 views
1

我有一個奇怪格式的日期列的數據框。我想創建一個只顯示來自原始日期列的年份的列,但我很難想出辦法實現此目的,因爲當前日期列被視爲一個因素。任何建議如何有效地做到這一點,將不勝感激。R中非標準日期係數的新列


起始號碼:

org <- c("a","b","c","d") 
country <- c("1","2","3","4") 
date <- c("01-09-14","01-10-07","11-31-99","10-31-12") 
toy <- data.frame(cbind(org,country,date)) 
toy 
    org country  date 
1 a  1 01-09-14 
2 b  2 01-10-07 
3 c  3 11-31-99 
4 d  4 10-31-12 

str(toy$date) 
Factor w/ 4 levels "01-09-14","01-10-07",..: 1 2 4 3 

期望的結果:

org country  Year 
1 a  1  2014 
2 b  2  2007 
3 c  3  1999 
4 d  4  2012 
+0

奔感謝在我的玩具例子指出錯誤(11月31日不能存在)。 – Daina

回答

5

這應該工作:

transform(toy,Year=format(strptime(date,"%m-%d-%y"),"%Y")) 

這產生

## org country  date Year 
## 1 a  1 01-09-14 2014 
## 2 b  2 01-10-07 2007 
## 3 c  3 11-31-99 <NA> 
## 4 d  4 10-31-12 2012 

我最初認爲NA值是因爲%y格式指標是不夠聰明的將前世紀的日期,但?strptime說:

「%Y」一年不世紀(00-99 )。在輸入上,00到68的值是 前綴20和69到99乘19 - 這是2004和2008 POSIX標準指定的行爲 ,但他們做的 也表示'預計在未來的版本中,默認從2位數年份推斷出的世紀將會改變' 。

暗示它應該能夠處理它。

這個問題實際上是11月31日不存在...

(您可以在您的休閒刪除date列...)