【发布时间】:2016-08-10 23:34:21
【问题描述】:
基本上,我只需要 R 中的一列时间戳中的小时、分钟和秒,因为我想查看不同数据点在一天和一天的不同时间出现的频率,而日期是不相关的。
但是,这是数据集中时间戳的结构方式: 2008-08-07T17:07:36Z
我不确定如何只从这个时间戳中获取那个时间。
感谢您提供的任何帮助,如果我可以提供更多信息,请告诉我!
【问题讨论】:
基本上,我只需要 R 中的一列时间戳中的小时、分钟和秒,因为我想查看不同数据点在一天和一天的不同时间出现的频率,而日期是不相关的。
但是,这是数据集中时间戳的结构方式: 2008-08-07T17:07:36Z
我不确定如何只从这个时间戳中获取那个时间。
感谢您提供的任何帮助,如果我可以提供更多信息,请告诉我!
【问题讨论】:
我们可以使用strptime 转换为日期时间类,然后使用format 提取小时:分钟:秒。
dtime <- strptime(str1, "%Y-%m-%dT%H:%M:%SZ")
format(dtime, "%H:%M:%S")
#[1] "17:07:36"
如果 OP 想要将小时、分钟、秒作为单独的列
read.table(text=format(dtime, "%H:%M:%S"), sep=":", header=FALSE)
# V1 V2 V3
#1 17 7 36
另一个选项是使用lubridate
library(lubridate)
format(ymd_hms(str1), "%H:%M:%S")
#[1] "17:07:36"
str1 <- "2008-08-07T17:07:36Z"
【讨论】:
只是
x <- '2008-08-07T17:07:36Z'
substr(x, 12, 19)
#[1] "17:07:36"
...如果时间戳是一致的,我想它会是一个 ISO_8601 (https://en.wikipedia.org/wiki/ISO_8601) 字符串。
【讨论】:
我想你期待这个......
Sys.time()
[1] "2016-04-19 11:09:30 IST"
format(Sys.time(),format = '%T')
[1] "11:09:30"
如果您想提供自己的时间戳,请使用以下代码:
format(as.POSIXlt("2016-04-19 11:02:22 IST"),format = '%T')
[1] "11:02:22"
【讨论】:
正则表达式可能会非常有效:
x <- '2008-08-07T17:07:36Z'
x
## [1] "2008-08-07T17:07:36Z"
sub('.*T(.*)Z', '\\1', x)
## [1] "17:07:36"
【讨论】: