【发布时间】:2016-02-18 09:45:39
【问题描述】:
我有一个 character 类的数据框列,其中包含不同的日期格式:
foo=data.frame(Date=c("29-Jan-16","29-Jan-16","2/5/2016","2/5/2016"),stringsAsFactors = F)
我想将Date 列转换为Date 类对象的向量。我可以分别正确解析每种格式:
> as.Date( foo$Date, format = "%d-%b-%y" )
[1] "2016-01-29" "2016-01-29" NA NA
> as.Date( foo$Date, format = "%m/%d/%Y" )
[1] NA NA "2016-02-05" "2016-02-05"
所以我想用ifelse 和grepl 加入两个解析指令。请注意,grepl 正确识别了使用第一种格式的行
> grepl("-",foo$Date)
[1] TRUE TRUE FALSE FALSE
但是,完整的指令不起作用:
bar = foo
bar$Date=ifelse(grepl("-",foo$Date),
as.Date( foo$Date, format = "%d-%b-%y" ),
as.Date( foo$Date, format = "%m/%d/%Y" ))
> bar
Date
1 16829
2 16829
3 16836
4 16836
问题:
- 您能帮我了解发生了什么吗?
- 即使我设法在您的帮助下修复了我的解决方案,我也了解了更多关于 R 的知识,这很好,但解决方案仍然不是最理想的。原因是填充数据框的“聪明”人可能会选择使用更多的日期格式(以前已经发生过,并且很可能会再次发生)。然后我将不得不嵌套更多
ifelse,并创建更复杂的正则表达式。代码很快就会变得令人讨厌和不可读。有没有办法让 R 自动为foo$Date的每个元素找到正确的数据格式?
【问题讨论】: