在 R 中将 %D.%H:%M:%S 转换为 %H:%M:%S

问题描述

我有一些不同持续时间格式的字符串。它们中的大多数采用 %H:%M:%s 格式,但其中一些采用 %D.%H:%M:%s 格式。我想将后者转换为前者的格式。最有效的方法是什么?

示例字符串

 [1] "10.10:58:28" "06:17:07"    "02:34:39"    "01:10:50"    "01:06:18"    "1.00:02:47"  "3.05:40:06"  "05:06:23"    "05:35:46"    "01:47:16"   
 [11] "1.03:24:46"  "03:23:07"    "03:37:23"    "03:01:22"    "03:38:06"    "02:31:42"    "04:33:04"    "04:11:34"    "02:43:00"    "07:03:16"   
 [21] "01:18:15"    "00:00:17"    "02:22:54"    "05:24:20"    "05:25:14"    "05:42:25"    "04:36:01"    "05:04:59"    "02:03:39"    "59.03:03:19"
 [31] "01:28:53"    "59.03:03:19" "01:28:53"    "23:24:56"    "00:54:02"    "00:03:49"    "00:20:14"    "02:02:00"    "02:06:06"    "03:06:30"   
 [41] "01:06:56"    "03:08:14"    "07:10:03"    "02:25:38"    "19:20:48"    "04:19:55"    "1.20:43:46"  "01:17:52"    "05:46:05"    "00:18:02"   
 [51] "2.03:27:50"  "00:00:32"    "04:20:49"    "04:37:09"    "05:30:47"    "01:34:04"    "02:19:55"    "05:12:19"    "03:32:31"    "00:22:42"   
 [61] "06:07:06"    "04:29:06"    "05:23:51"    "01:44:53"    "07:14:42"    "06:14:20"    "02:57:08"    "05:25:58"    "3.22:46:41"  "02:40:29"   
 [71] "03:18:57"    "03:08:42"    "03:25:22"    "03:51:23"    "03:24:57"    "00:04:07"    "03:09:47"    "04:41:39"    "05:37:18"    "05:46:58"   
 [81] "00:19:32"    "05:39:10"    "04:08:27"    "02:12:08"    "07:49:42"    "01:31:45"    "00:00:00"    "00:00:00"    "00:00:00"    "00:00:00"   
 [91] "02:59:25"    "03:34:31"    "02:53:47"    "02:51:24"    "03:18:26"    "03:21:12"    "02:45:38"    "01:30:21"    "02:19:22"    "2.22:00:08" 
[101] "01:50:34"    "04:20:33"    "02:05:52"    "06:07:08"    "01:48:33"    "00:01:43"    "04:45:54"    "04:48:57"    "02:04:25"    "01:51:30"   
[111] "04:12:43"    "02:19:47"    "05:06:01"    "00:00:00"    "05:07:20"    "04:24:59"    "04:27:39"    "22:35:31"    "00:00:00"    "06:20:22"   
[121] "06:46:37"    "06:04:58"    "04:33:05"    "03:39:32"    "05:38:28"    "04:51:55"  

编辑: 输入 - 输出示例

"10.10:58:28" 应转换为 "250:58:28"(10. 等于 10 天等于 240 小时) 尽管 “06:04:58”保持“06:04:58”不变。

解决方法

最后答案很简单:编写自己的函数。

这个函数应该做我要求的:

dhms_to_hms <- function(x){
  if(str_length(x)>8){
 val_num <- x %>%
  str_replace('\\.',':') %>%
  str_extract_all('(\\d){1,}') %>%
  flatten %>%
  as.numeric 
 hms <- str_c(val_num[1]*24+val_num[2],val_num[3],val_num[4],sep = ':')
  }else hms <- x
return(hms) 
}