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

如何在Base R中将任意格式的时长字符串转换为秒数?

在Base R中解析时长字符串为秒数

可以用Base R实现这个需求,无需依赖外部包。下面是一个自定义函数,能自动识别两种常见的时长格式——带时间单位的字符串(如'30 min'、'0.5 h')和HH:MM:SS格式的时间字符串,将其转换为总秒数:

str_to_seconds <- function(time_str) {
  # 处理HH:MM:SS格式
  if (grepl("^\\d{1,2}:\\d{2}:\\d{2}$", time_str)) {
    parts <- as.integer(strsplit(time_str, ":")[[1]])
    return(parts[1] * 3600 + parts[2] * 60 + parts[3])
  }
  
  # 处理带单位的格式
  # 提取数值和单位(支持整数、小数,单位忽略大小写)
  num <- as.numeric(gsub("[^0-9.]", "", time_str))
  unit <- tolower(gsub("[0-9. ]", "", time_str))
  
  # 单位与秒数的映射关系
  unit_map <- list(
    s = 1, sec = 1,
    m = 60, min = 60,
    h = 3600, hr = 3600,
    d = 86400, day = 86400
  )
  
  # 匹配单位并计算总秒数
  if (unit %in% names(unit_map)) {
    return(num * unit_map[[unit]])
  } else {
    stop("无法识别的时间单位:", unit)
  }
}

测试示例

str_to_seconds("30 min")    # 输出 1800
str_to_seconds("1800 s")    # 输出 1800
str_to_seconds("0.5 h")     # 输出 1800
str_to_seconds("00:30:00")  # 输出 1800
str_to_seconds("2 h")       # 输出 7200
str_to_seconds("1.5 min")   # 输出 90
str_to_seconds("1 d")       # 输出 86400

函数说明

  • 优先匹配HH:MM:SS格式,拆分后按小时、分钟、秒的换算规则计算总秒数;
  • 对于带单位的字符串,自动提取数值和单位(忽略空格、不区分大小写),通过预定义的单位映射表完成转换;
  • 支持整数、小数形式的数值输入,若遇到未定义的单位会抛出明确的错误提示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 02:44:58