R语言无日期通用时间的转换、时长计算与分类方法问询
R完全可以在不绑定具体日期的前提下实现所有上述纯时间处理需求,以下是可直接复用的实现方案:
实现步骤
1. 字符格式时间转数值格式
使用lubridate包的hm()函数可以直接解析"HH:MM"格式的纯时间字符串,无需绑定日期,同时可转换为距离当日0点的小时数值,方便后续计算:
# 加载依赖包 library(lubridate) library(dplyr) # 构造示例数据,可替换为你的实际数据 work_df <- tibble( 上班起始时间 = c("09:00", "09:30", "10:15", "08:45", "10:05"), 下班结束时间 = c("17:00", "18:20", "16:40", "19:10", "17:30") ) # 执行格式转换 work_df <- work_df %>% mutate( # 解析为纯时间类,无日期绑定 上班_time = hm(上班起始时间), # 转换为数值格式,单位为小时(距离0点的时长) 上班_小时值 = hour(上班_time) + minute(上班_time)/60, 下班_time = hm(下班结束时间), 下班_小时值 = hour(下班_time) + minute(下班_time)/60 )
2. 计算工作间隔与日均工作时长
直接通过数值列做差值计算单天工作时长,再求均值即可得到日均时长:
# 计算单天工作时长 work_df <- work_df %>% mutate(单日工作时长_小时 = 下班_小时值 - 上班_小时值) # 计算日均工作时长,na.rm参数自动跳过空值 avg_daily_work <- mean(work_df$单日工作时长_小时, na.rm = TRUE)
如果存在跨零点的上下班场景(如下班时间为次日01:30),可增加判断:单日工作时长_小时 = ifelse(下班_小时值 < 上班_小时值, 下班_小时值 +24 -上班_小时值, 下班_小时值 -上班_小时值)
3. 上下班分类打标
使用case_when函数按阈值做标签匹配即可:
work_df <- work_df %>% mutate( 上班标签 = case_when( 上班_小时值 < 10 ~ "早到者", 上班_小时值 >= 10 ~ "晚到者" ), 下班标签 = case_when( 下班_小时值 < 17 ~ "早走者", 下班_小时值 >= 17 ~ "晚走者" ) )
执行完上述代码后,work_df会包含原始时间、转换后的数值、单日工作时长、分类标签所有字段,满足全部需求。
内容的提问来源于stack exchange,提问作者Sheila Dunbar
相关产品推荐
相关产品推荐

