在日期R数据框中转换不同的字符串类型

时间:2016-10-17 15:32:07

标签: r date datetime lubridate

我有一个杂乱的数据框,有两列:

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循环来实现这一点,但是,我正在寻找更优雅的矢量化解决方案。

你有什么想法吗?

由于

2 个答案:

答案 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"))

哪个应为您提供的每个条目返回适当的值。