在R中将字符转换为时间

时间:2016-05-10 04:17:27

标签: r date time

我有一个时间列表,如下所示:

"0:30:00"  "1:00:00"  "1:30:00"  "10:00:00" "10:30:00" "11:00:00" "11:30:00" "12:00:00" "12:30:00" "13:00:00" "13:30:00" "14:00:00" "14:30:00"

当我使用as.Date函数使用以下代码将它们转换为R中的日期对象时:

time1<-as.Date(time,format='%H:%M:%S')

它给了我以下输出:

"2016-05-09" "2016-05-09" "2016-05-09" "2016-05-09" "2016-05-09" "2016-05-09" "2016-05-09" "2016-05-09" "2016-05-09" "2016-05-09" "2016-05-09" "2016-05-09"

为什么会这样?我的代码或原始时间格式有问题吗?

感谢。

2 个答案:

答案 0 :(得分:6)

我们可以使用times中的chron转换为时间

library(chron)
times(v1)
#[1] 00:30:00
chron(times(v1))
#[1] (01/01/70 00:30:00)

或使用strptime转换为日期时间对象

r1 <- strptime(v1, format = "%H:%M:%S")
r1
#[1] "2016-05-10 00:30:00 IST"

除了strptime之外,POSIXct也是可能的

r2 <- as.POSIXct(v1, format = "%H:%M:%S")
r2
#[1] "2016-05-10 00:30:00 IST"

strptimePOSIXct之间的区别在于前者有POSIXlt类,而后者只有POSIXct。另外,如果我们查看两者的结构,strptime将存储为list

is.list(r1)
#[1] TRUE
is.list(r2)
#[1] FALSE
lapply(r1, I)
r1$min
#[1] 30

另一个选项是lubridate

library(lubridate)
hms(v1)
#[1] "30M 0S"

这也有日期,即当前日期。

as.Date仅转换为'日期'。它没有显示任何时间。

数据

v1 <- "0:30:00"

答案 1 :(得分:2)

您也可以使用as.POSIXct

x <- c("0:30:00",  "1:00:00",  "1:30:00",  "10:00:00", "10:30:00", "11:00:00" ,"11:30:00", "12:00:00", "12:30:00", "13:00:00", "13:30:00", "14:00:00", "14:30:00")

as.POSIXct(x,format="%H:%M:%S")

#[1] "2016-05-10 00:30:00 IST" "2016-05-10 01:00:00 IST" "2016-05-10 01:30:00 IST" "2016-05-10 10:00:00 IST"
#[5] "2016-05-10 10:30:00 IST" "2016-05-10 11:00:00 IST" "2016-05-10 11:30:00 IST" "2016-05-10 12:00:00 IST"
#[9] "2016-05-10 12:30:00 IST" "2016-05-10 13:00:00 IST" "2016-05-10 13:30:00 IST" "2016-05-10 14:00:00 IST"
#[13] "2016-05-10 14:30:00 IST"