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

按员工ID分组计算连续出勤天数平均值 R tibble操作问题

解决方案

核心思路

首先为每位员工标记所有连续出勤的独立时段,统计每个时段的出勤天数后,按员工ID分组计算均值即可。针对特殊值的处理规则如下:

  • Consec_Days为NA:属于员工首次出勤,是新连续时段的起点
  • Consec_Days为0:代表连续出勤中断,是下一个新连续时段的起点
  • Consec_Days为1:属于当前正在延续的连续时段

实现代码(tidyverse方案,适配百万行量级性能)

library(dplyr)

result <- your_tibble %>%
  # 按员工ID分组,按出勤日期排序避免原始数据顺序混乱
  group_by(Emp_ID) %>%
  arrange(Start_Date, .by_group = TRUE) %>%
  # 生成连续段ID:遇到NA或0时新建一个连续段
  mutate(
    period_id = cumsum(ifelse(is.na(Consec_Days) | Consec_Days == 0, 1, 0))
  ) %>%
  # 按员工+连续段分组,统计每个段的出勤天数
  group_by(Emp_ID, period_id) %>%
  summarise(period_days = n(), .groups = "drop_last") %>%
  # 按员工分组计算平均连续出勤天数
  summarise(avg_consec_days = mean(period_days), .groups = "drop")

样例结果验证

用你提供的样例数据计算得到的结果如下:

  • 员工ID=4:仅1个连续段,共3天,平均连续出勤天数为3
  • 员工ID=3:共4个连续段,天数分别为1、3、2、1,平均连续出勤天数为1.75

性能说明

上述方案全程使用向量化运算,百万行量级数据可在数秒内完成计算。如果数据量超过千万行,可以替换为data.table实现相同逻辑,性能会更高。

内容的提问来源于stack exchange,提问作者user3736739

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 06:54:03