You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 21:06:04