我有一个杂乱的数据框,有两列:
DF<-data.frame(x=seq(100,105,1),y=c("3/25/2014 12:56","3/25/2014 14:18","3/25/2014 14:18","3/25/2014 14:18","3/25/2014 14:18","2014-03-25 14:19:08.043"))
x y
1 100 3/25/2014 12:56
2 101 3/25/2014 14:18
3 102 3/25/2014 14:18
4 103 3/25/2014 14:18
5 104 3/25/2014 14:18
6 105 2014-03-25 14:19:08.043
我想将y列转换为R日期,以便:
x y
1 100 2014-03-25
2 101 2014-03-25
3 102 2014-03-25
4 103 2014-03-25
5 104 2014-03-25
6 105 2014-03-25
为了做到这一点,我可以使用Lubridate的函数parse_date_time作为前5个元素
as.Date(parse_date_time(DF$y[1:5], orders="mdy hm"))
直接使用as.Date函数作为最后一个:
as.Date(DF$y[6], orders="mdy hm")
我可以通过创建for和if循环来实现这一点,但是,我正在寻找更优雅的矢量化解决方案。
你有什么想法吗?
由于
答案 0 :(得分:5)
我随时都会使用包:
library(anytime)
anydate(DF$y)
#[1] "2014-03-25" "2014-03-25" "2014-03-25" "2014-03-25" "2014-03-25" "2014-03-25"
答案 1 :(得分:2)
您可以传递多个订单以尝试parse_date_time
,如下所示:
parse_date_time(DF$y, orders = c("mdy HM", "ymd HMS"))
哪个应为您提供的每个条目返回适当的值。