如何在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
相关产品推荐
相关产品推荐

