按分组计算时间列最小与最大值差值的R语言技术问题
解决分组计算饮水时间差的R代码问题
嘿,我来帮你搞定这个R代码的bug!你的需求是按年龄分组(1=青少年,2=成年人)计算饮水时间的最大最小值差,原代码跑不起来主要有几个小细节没处理好,我一步步给你修正:
原代码的问题点
- 缺少依赖包加载:
hm()函数是lubridate包的工具,你没提前加载这个包,R根本找不到这个函数;另外dplyr的管道操作也需要确保包已加载。 - summarise语法错误:你没有明确指定要计算的是
time列的极值差,而且没给计算结果的列命名,不符合summarise的语法要求。 - 时间间隔转换问题:
hm()生成的是Period类型对象,直接相减后是时间周期,需要转换成小时数才能得到你要的21、6这样的数值结果。
修正后的完整代码
# 加载必需的R包 library(lubridate) library(dplyr) # 构造原始数据 age <- c(1,1,2,1,2) time <- hm("22:00","01:00","12:00","16:00","18:00") drink <- data.frame(age, time) # 分组计算时间差(转换为小时数) diff_result <- drink %>% group_by(age) %>% summarise( time_diff_hours = as.duration(max(time) - min(time)) / dhours(1), .groups = "drop" # 可选参数,取消分组状态,让结果回到普通数据框格式 ) # 查看最终结果 diff_result
运行结果说明
执行这段代码后,你会得到完全符合预期的结果:
- 青少年组(age=1)的时间差为21小时
- 成年人组(age=2)的时间差为6小时
内容的提问来源于stack exchange,提问作者Robin Rosine
相关产品推荐
相关产品推荐

