R语言如何按指定规则删除非完全重复行(基于人员、日期和工时范围)
R清洗重复日期多余工时记录方案
实现逻辑
- 首先统计每个员工下各工时班次(start_hour与end_hour组合)的总出现次数
- 按「员工ID+日期」分组判断,单日期仅1条记录直接保留
- 单日期多条记录时,优先删除所属班次出现次数≥2的行,保留班次出现次数<2的行
- 若筛选后单日期仍有多条记录(所有对应班次出现次数均<2),随机保留1条即可
实现代码
首先加载依赖包:
library(dplyr)
数据清洗代码:
resp_clean <- resp %>% # 统计每个员工下每个工时班次的出现次数 group_by(person_number, start_hour, end_hour) %>% mutate(shift_count = n()) %>% ungroup() %>% # 按员工+日期分组处理重复记录 group_by(person_number, date) %>% filter( n() == 1 | shift_count < 2 ) %>% # 剩余仍重复的记录随机保留1条 slice_sample(n = 1) %>% ungroup() %>% # 删除辅助计算的统计列 select(-shift_count)
效果验证
以示例中person_number为957505的记录为例:
- date=3对应两个工时范围9-21、15-21,其中9-21在该员工所有记录中出现4次≥2,会被过滤,仅保留15-21的行
- 若某日期下所有对应班次出现次数均<2,
slice_sample会随机保留1条,符合需求
内容的提问来源于stack exchange,提问作者psysky
相关产品推荐
相关产品推荐

