来自R中非标准日期因子的新列

Dai*_*ina 1 r date

我有一个奇怪格式化日期列的数据框.我想创建一个列,只显示原始日期列中的年份,我无法想出一个方法来执行此操作,因为当前日期列被视为一个因素.任何关于如何有效地做到这一点的建议将不胜感激.

示例
开头:

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
Run Code Online (Sandbox Code Playgroud)

期望的结果:

  org country     Year
1   a       1     2014
2   b       2     2007
3   c       3     1999
4   d       4     2012
Run Code Online (Sandbox Code Playgroud)

Ben*_*ker 5

这应该工作:

transform(toy,Year=format(strptime(date,"%m-%d-%y"),"%Y"))
Run Code Online (Sandbox Code Playgroud)

这产生了

##   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
Run Code Online (Sandbox Code Playgroud)

我最初认为NA价值是因为%y格式指标不够智能,无法处理上个世纪的日期,但?strptime他说:

'%y'没有世纪的年份(00-99).在输入时,值00到68的前缀为20和69到99乘以19 - 这是2004和2008 POSIX标准指定的行为,但他们也说'预计在未来的版本中,默认世纪是从一个两位数的年份将改变'.

暗示它应该能够处理它.

问题实际上是11月31日不存在......

(您可以随意放下date专栏...)