我有一个时间列表,如下所示:
"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)
为什么会这样?我的代码或原始时间格式有问题吗?
谢谢.
我们可以使用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)