在R中将字符转换为时间

A11*_*122 0 time r date

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

"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"
Run Code Online (Sandbox Code Playgroud)

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

time1<-as.Date(time,format='%H:%M:%S')
Run Code Online (Sandbox Code Playgroud)

它给了我以下输出:

"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"
Run Code Online (Sandbox Code Playgroud)

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

谢谢.

akr*_*run 6

我们可以使用timesfrom chron转换为时间

library(chron)
times(v1)
#[1] 00:30:00
chron(times(v1))
#[1] (01/01/70 00:30:00)
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

strptime和之间的区别在于POSIXct前者有POSIXlt阶级而后者只有阶级POSIXct.另外,如果我们查看两者的结构,则将strptime其存储为list

is.list(r1)
#[1] TRUE
is.list(r2)
#[1] FALSE
lapply(r1, I)
r1$min
#[1] 30
Run Code Online (Sandbox Code Playgroud)

另一种选择是 lubridate

library(lubridate)
hms(v1)
#[1] "30M 0S"
Run Code Online (Sandbox Code Playgroud)

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

as.Date只转换为"日期".它没有显示任何时间.

数据

v1 <- "0:30:00"
Run Code Online (Sandbox Code Playgroud)