如何在R中将MM:SS格式字符串转为时间类型并做加减运算
错误原因
你原有代码执行失败的核心原因是:tm列是MM:SS格式的字符串,直接调用as.numeric()无法完成有效转换,会直接返回NA,后续运算自然全部得到NA结果。
实现方法1:使用lubridate包处理(更直观)
lubridate包的ms()函数可以直接识别MM:SS格式的时间字符串,转换为周期类型后直接做时间运算即可:
library(tidyverse) library(lubridate) dat %>% # 先把tm转成分钟-秒周期,加5分钟,再格式化回MM:SS字符串 mutate(nt = format(ms(tm) + minutes(5), "%M:%S"))
运行结果:
# A tibble: 3 × 3 title tm nt <chr> <chr> <chr> 1 Title A 31:17 36:17 2 Title B 30:28 35:28 3 Title C 32:06 37:06
实现方法2:使用hms包处理
如果要使用hms包,需要先把MM:SS格式补成HH:MM:SS格式再转换,5分钟换算成300秒做加法:
library(tidyverse) library(hms) dat %>% mutate(nt = hms::as_hms(paste0("00:", tm)) + 5*60, # 如果需要输出MM:SS格式字符串,再加一步格式化 nt = format(nt, "%M:%S"))
运行结果和方法1完全一致。
内容的提问来源于stack exchange,提问作者littleworth
相关产品推荐
相关产品推荐

