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

如何在R语言中将时长的字符串表示转换为小数格式?

在R中把时长字符串转换为小数小时格式

方法一:基础R实现(无需额外包)

假设你的时长数据存在向量time_str中,直接用基础正则和数值计算就能搞定:

# 模拟你的数据
time_str <- c("11h30m", "59m", "2h15m", "3h", "45m")

# 提取小时数:匹配带h的数字,无h则设为0
hours <- as.numeric(gsub("(\\d+)h.*|.*", "\\1", time_str))
hours[is.na(hours)] <- 0

# 提取分钟数:匹配带m的数字,无m则设为0
minutes <- as.numeric(gsub(".*?(\\d+)m|.*", "\\1", time_str))
minutes[is.na(minutes)] <- 0

# 计算小数小时
decimal_hours <- hours + minutes / 60

运行后decimal_hours的结果是:11.500000, 0.983333, 2.250000, 3.000000, 0.750000,完全符合需求。

方法二:用tidyverse工具包(更直观)

如果你习惯用tidyverse的语法,借助stringr的字符串提取功能会更清晰,适合直接处理数据框:

library(tidyverse)

# 模拟你的学生数据框
student_data <- tibble(study_time = c("11h30m", "59m", "2h15m", "3h", "45m"))

# 转换并生成新列
student_data <- student_data %>%
  mutate(
    # 提取小时(匹配后面跟h的数字,无则填0)
    hours = as.numeric(str_extract(study_time, "\\d+(?=h)")) %>% replace_na(0),
    # 提取分钟(匹配后面跟m的数字,无则填0)
    minutes = as.numeric(str_extract(study_time, "\\d+(?=m)")) %>% replace_na(0),
    # 计算小数小时
    decimal_hours = hours + minutes / 60
  )

注意事项

  • 两种方法都兼容仅小时(如"3h")、仅分钟(如"59m")、同时含小时分钟的格式
  • 把代码中的向量/列名替换成你实际数据中的名称即可
  • 转换后的decimal_hours就是你需要的小数格式,可直接用于后续分析

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 04:56:03