将Dataframe中HH:MM:SS格式列转换为分钟列(R语言)
将HH:MM:SS格式时间转为分钟数(R语言)
问题场景
处理dataframe时,需将ride_length列(HH:MM:SS格式)转换为对应的分钟数,新增列存储结果。
原代码问题
你写的函数存在两个核心问题:
- 函数内部直接引用全局变量
df$ride_length,未使用传入的参数x,违背函数封装逻辑 read.table处理时间字符串的效率较低,且易出现解析异常
解决方案
方法1:基础R实现(无需额外包)
利用strptime解析时间,拆分出时、分、秒后计算总分钟数:
# 新增分钟数列 df$ride_length_minutes <- with(strptime(df$ride_length, "%H:%M:%S"), hour * 60 + min + sec / 60)
方法2:lubridate包实现(推荐,代码更简洁)
lubridate是R中处理时间的专用包,语法更直观:
# 先安装包(首次使用时执行) # install.packages("lubridate") library(lubridate) # 将时间字符串转为周期类型,再转成秒后除以60得到分钟数 df$ride_length_minutes <- period_to_seconds(hms(df$ride_length)) / 60
方法3:修正你原有的函数
如果想保留自己的函数思路,只需修正参数引用问题:
time2minutes <- function(x){ parts <- as.matrix(read.table(text = x, sep = ":")) c(parts %*% c(60, 1, 1/60)) } # 调用函数生成新列 df$ride_length_minutes <- time2minutes(df$ride_length)
内容的提问来源于stack exchange,提问作者MAHADEV BHANDARI
相关产品推荐
相关产品推荐

