r - 在R中将值转换为时间格式

标签 r time-series strptime

我的值格式为“221559460”,其中前两位是小时,另外两位是分钟,后面的数字以毫秒为单位。是否有任何快捷方式可以转换为时间序列格式,而无需在值中手动附加“:”并从 R 中的毫秒数字计算秒?

最佳答案

我认为由于没有“秒”部分,您无法避免在这里进行一些解析,但即使使用简单的正则表达式也可以很容易地完成:

> sub(pattern     = '([0-9]{2})([0-9]{2})([0-9]{2})([0-9]*)',
+     replacement = '\\1:\\2:\\3.\\4',
+     x           = 221559460)
[1] "22:15:59.460"

> strptime(
+     x = sub(pattern     = '([0-9]{2})([0-9]{2})([0-9]{2})([0-9]*)',
+             replacement = '\\1:\\2:\\3.\\4',
+             x           = 221559460),
+     format = '%H:%M:%OS')
[1] "2015-12-11 22:15:59 PST"

根据以下评论更新了答案:

> options(digits.secs = 3)
> strptime(
+     x = sub(pattern     = '([0-9]{8})_([0-9]{2})([0-9]{2})([0-9]{2})([0-9]*)',
+             replacement = '\\1 \\2:\\3:\\4.\\5',
+             x           = '20150819_221559460'),
+     format = '%Y%m%d %H:%M:%OS')
[1] "2015-08-19 22:15:59.46 PDT"

矢量化示例的更新:

> df <- data.frame(timestamp = paste('20150819', 221559460 + round(runif(10) * 100), sep = '_'))
> strptime(sub('([0-9]{3})$', '.\\1', df$timestamp),'%Y%m%d_%H%M%OS')
 [1] "2015-08-19 22:15:59.517 PDT" "2015-08-19 22:15:59.550 PDT"
 [3] "2015-08-19 22:15:59.538 PDT" "2015-08-19 22:15:59.493 PDT"
 [5] "2015-08-19 22:15:59.484 PDT" "2015-08-19 22:15:59.549 PDT"
 [7] "2015-08-19 22:15:59.510 PDT" "2015-08-19 22:15:59.462 PDT"
 [9] "2015-08-19 22:15:59.466 PDT" "2015-08-19 22:15:59.474 PDT"

关于r - 在R中将值转换为时间格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34233981/

相关文章:

R-导入CSV文件,所有数据归入一个(第一)列

r - 从需要使用 R 登录的网站中抓取信息(也许使用 API)

python - Pandas 时间序列多切片

R - 将数据帧转换为时间序列

python - 如何将字符串 ['2019-06-01T23:07:02.000+0000' ] 转换为 Python 3 中的日期时间对象

r - 如何计算表中的共现率?

css - Shiny 的布局 : Build a shiny page with a scrollable panel and a panel that remains fixed

python - 如何检测时间序列数据(特别是)中存在趋势和季节性的异常?

python - ValueError 时间数据 'Fri Mar 11 15:59:57 EST 2016' 与格式 '%a %b %d %H:%M:%S %Z %Y' 不匹配

c - 从 time_t 中减去 char 指针