如何让R在min、max、mean计算中返回hh:mm:ss格式且秒数为正?
解决按会员类型统计骑行时长的问题
问题根源
你之前的代码直接对ride_length做统计,大概率是因为该列是字符类型,min/max会按字符串字典序计算(而非实际时长的大小),导致结果不符合预期;另外如果原始数据里有负的时长值,也会导致hms函数报错。
解决方案步骤
- 先清洗数据:把
ride_length转为时长类型,同时过滤掉负时长
library(dplyr) library(hms) # 假设你的数据集叫df,先做数据清洗 df_clean <- df %>% mutate(ride_length = hms(ride_length)) %>% # 把hh:mm:ss字符串转为hms时长对象 filter(as.numeric(ride_length) > 0) # 过滤掉负时长,转为秒数判断更稳妥
- 分组统计并格式化输出为hh:mm:ss格式
ride_stats <- df_clean %>% group_by(member_casual) %>% summarise( min_ride_length = hms(min(as.numeric(ride_length))), # 先取秒数最小值,再转回hms格式 max_ride_length = hms(max(as.numeric(ride_length))), mean_ride_length = hms(round(mean(as.numeric(ride_length)))) # 平均值取整后转hms,避免小数秒 )
说明
- 先将时长转为秒数(数值型)做统计,再转回hms格式,能避免直接对hms对象统计可能出现的报错
- 过滤负时长是因为实际骑行时长不可能为负,这类脏数据会干扰统计结果
内容的提问来源于stack exchange,提问作者samtastic
相关产品推荐
相关产品推荐

