我有一个时间列表,如下所示:
"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"
为什么会这样?我的代码或原始时间格式有问题吗?
感谢。
答案 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"
strptime
和POSIXct
之间的区别在于前者有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"