2016-05-14 40 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列...)