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

