我从数据库中获取了一组日期,然后将其转换为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”
答案 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)