如何按设备分组计算相邻两次维护记录之间的间隔天数
实现思路
你需要按以下步骤处理:
- 先将维护日期列从字符串格式转换为R可识别的日期格式,注意原数据是
日-月-年的排列顺序,转换时要指定对应格式 - 按设备编号分组,组内按维护日期升序排列,保证记录按时间先后顺序计算
- 用
lag()函数取同组内上一行的维护日期,和当前日期做差得到间隔天数 - 过滤掉每个设备第一条维护记录的空值(首次维护没有上一次记录,无间隔值),调整列名后即可得到预期结果
完整代码
# 加载依赖包,没有安装的话先运行 install.packages(c("dplyr","lubridate")) library(dplyr) library(lubridate) test = data.frame(car = c("A", "A", "B", "B", "B", "C", "C", "D", "D", "D", "E"), maintenance_date= c("20-09-2020", "25-09-2020", "14-05-2020", "20-05-2020", "20-05-2021", "11-01-2021", "13-01-2021", "13-01-2021", "15-01-2021", "15-01-2021", "13-01-2021")) result <- test %>% mutate(maintenance_date = dmy(maintenance_date)) %>% group_by(car) %>% arrange(maintenance_date, .by_group = TRUE) %>% mutate(interval = as.numeric(maintenance_date - lag(maintenance_date))) %>% filter(!is.na(interval)) %>% select(car, maintenance_date = interval) %>% ungroup() # 输出结果查看 print(result)
输出验证
运行上述代码得到的结果和你给出的预期完全一致:
# A tibble: 6 × 2 car maintenance_date <chr> <dbl> 1 A 5 2 B 6 3 B 365 4 C 2 5 D 2 6 D 0
注意事项
如果你的原始数据已经保证同一个设备的维护记录是按时间先后顺序存储的,可以省略arrange步骤,加上这一步是为了兼容原始数据顺序混乱的场景,避免计算错误。
内容的提问来源于stack exchange,提问作者DR15
相关产品推荐
相关产品推荐

