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

时间:2016-05-14 19:58:01

标签: 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

期望的结果:

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

1 个答案:

答案 0 :(得分: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专栏......)