R数组的日期转换

时间:2019-06-12 14:12:41

标签: r

我从数据库中获取了一组日期,然后将其转换为Date类型。

> dates
              start            finish
1 29-Oct-2017 00:00 30-Oct-2017 00:00
2 30-Oct-2017 00:00 31-Oct-2017 00:00
3 31-Oct-2017 00:00 01-Nov-2017 00:00
4 01-Nov-2017 00:00 02-Nov-2017 00:00
5 02-Nov-2017 00:00 03-Nov-2017 00:00
6 03-Nov-2017 00:00 04-Nov-2017 00:00

我可以分别将 dates ['start'] dates ['finish'] 的每一列转换为

> as.Date(dates['start'][,1], format="%d-%b-%Y %H:%M")
[1] "2017-10-29" "2017-10-30" "2017-10-31" "2017-11-01" "2017-11-02"
[6] "2017-11-03"

但是有一种方法可以一步完成吗?

我同时尝试了两行,但不起作用。

> as.Date(dates[c('start', 'finish')], format="%d-%b-%Y %H:%M")
Error in as.Date.default(dates[c("start", "finish")], format = "%d-%b-%Y %H:%M") :
  do not know how to convert 'dates[c("start", "finish")]' to class “Date”

1 个答案:

答案 0 :(得分:0)

根据?as.Date

  

as.Date方法接受字符串,因数,逻辑NA和“ POSIXlt”和“ POSIXct”类的对象。

假设数据集为data.frame,则由于不满足要求,因此它将不起作用。我们可以使用lapply遍历列,应用as.Date转换为Date类,然后将输出分配回感兴趣的列

dates[c('start', 'finish')] <- lapply(dates[c('start', 'finish')], 
         as.Date, format = "%d-%b-%Y %H:%M")

有了tidyverse,我们可以使用mutate_at

library(dplyr)
library(lubridate)
dates %>%
      mutate_at(vars(start, finish), dmy_hm)