You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将R语言中不同格式的时长字符串解析为总秒数?

解决时间字符串转总秒数的问题

针对你遇到的as.duration将"m"解析为月份的问题,可以通过两种可靠方法实现正确转换:

方法一:自定义正则解析函数

直接提取字符串中的数值和时间单位,手动换算成秒:

library(stringr)

# 定义转换函数
convert_to_seconds <- function(time_str) {
  # 匹配所有数值+单位组合(支持小数)
  time_parts <- str_match_all(time_str, "(\\d+\\.?\\d*)(ms|s|m)")[[1]]
  values <- as.numeric(time_parts[, 2])
  units <- time_parts[, 3]
  
  # 按单位换算成秒后求和
  total_seconds <- sum(
    dplyr::case_when(
      units == "ms" ~ values / 1000,
      units == "s" ~ values,
      units == "m" ~ values * 60,
      TRUE ~ 0
    )
  )
  return(total_seconds)
}

# 测试示例
B <- c("39.2s", "31m 18s", "9ms")
sapply(B, convert_to_seconds)

执行后输出:

39.2s 31m 18s      9ms 
   39.20   1878.00     0.009 

方法二:使用lubridate的period函数

lubridate::period专门处理分钟、秒这类时间周期单位,不会将"m"识别为月份:

library(lubridate)
library(stringr)

# 先将毫秒转换为秒的小数形式(period不直接支持ms)
B_adjusted <- str_replace(B, "(\\d+)ms", "\\1/1000s")

# 解析为period后转成秒
sapply(B_adjusted, function(x) as.numeric(parse_period(x), "seconds"))

此方法同样能得到正确的总秒数结果。

为什么as.duration不行?

as.duration的字符串解析规则中,"m"默认对应**月份(month)**而非分钟(minute),因此会出现错误的大数值结果,改用上述方法即可规避这个问题。

内容的提问来源于stack exchange,提问作者lonestar21

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 21:06:07