如何按member_casual分组计算两datetime列的平均时间差?
问题解决:按会员类型分组计算平均骑行时长
你当前代码得到两组相同结果的原因是:单独创建的time_trip向量没有和原数据框df绑定,分组计算时实际是在对整个time_trip的均值重复输出,导致两组结果一致。
修改后的代码方案
如果started_at和ended_at已经是datetime格式,直接在管道流内计算耗时并分组统计:
# 按会员类型分组计算平均骑行时长 df %>% mutate(time_trip = difftime(ended_at, started_at, tz = "CST", units = "mins")) %>% group_by(member_casual) %>% summarise(平均骑行时长 = mean(time_trip, na.rm = TRUE))
额外处理:如果时间列不是datetime格式
如果started_at和ended_at还未转换为datetime类型,先添加格式转换步骤:
# 转换时间格式并分组计算平均骑行时长 df %>% mutate( started_at = as.POSIXct(started_at, tz = "CST"), ended_at = as.POSIXct(ended_at, tz = "CST"), time_trip = difftime(ended_at, started_at, units = "mins") ) %>% group_by(member_casual) %>% summarise(平均骑行时长 = mean(time_trip, na.rm = TRUE))
关键说明
- 使用
mutate在原数据框内新增time_trip列,确保每条记录的时长与对应的会员类型一一关联 - 添加
na.rm = TRUE可以忽略缺失的时间记录,避免均值计算出错 - 自定义结果列名(如
平均骑行时长)让输出更易读
内容的提问来源于stack exchange,提问作者Nicolas Grisè
相关产品推荐
相关产品推荐

