我有一个带有奇怪格式的日期列的数据框。我想创建一个列,仅显示原始日期列中的年份,但我很难想出一种方法来执行此操作,因为当前日期列被视为一个因素。任何有关如何有效地做到这一点的建议将不胜感激。
Example
从...开始:
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
这应该有效:
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
says:
‘%y’ 不带世纪的年份 (00-99)。输入时,值 00 到 68 是
以 20 和 69 为前缀,以 19 为 99 - 这就是行为
由 2004 和 2008 POSIX 标准指定,但它们确实
还说“预计在未来的版本中默认
从两位数年份推断出的世纪将会改变”。
暗示它应该能够处理它。
问题实际上是 11 月 31 日并不存在......
(您可以删除date
闲暇时专栏...)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)