我有一个奇怪格式化日期列的数据框。我想创建一个列,只显示原始日期列中的年份,我无法想出一个方法来执行此操作,因为当前日期列被视为一个因素。任何关于如何有效地做到这一点的建议都将不胜感激。
实施例
从:
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 :(得分: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
专栏......)