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

基于自上而下法的员工分摊:求R语言计算Adjusted_FTE的解决方案

基于data.table的层级FTE分配解决方案

步骤1:构造示例数据

先模拟符合需求的Employees和FTE表,用于验证逻辑:

library(data.table)

# 员工表:记录姓名、职位、地点
Employees <- data.table(
  Name = paste0("Emp", 1:10),
  Job_Title = c("Manager", "Manager", "Analyst", "Analyst", "Analyst", 
                "Analyst", "Clerk", "Clerk", "Clerk", "Clerk"),
  Location = c("New York", "New York", "New York", "New York", "London", 
               "London", "New York", "London", "London", "Paris")
)

# FTE配置表:按优先级排序的分组规则、期望累计FTE
FTE <- data.table(
  Group_Type = c("Job_Title", "Location"),
  Group_Value = c("Manager", "New York"),
  Cumulative_FTE_Desired = c(2, 5)
)

步骤2:核心层级分配逻辑

通过循环结合data.table的高效筛选,实现自上而下的员工分配——每处理完一组就标记已分配员工,后续组自动排除这些人员,最终计算出Adjusted_FTE:

# 给员工表添加「已分配」标记列
Employees[, Assigned := FALSE]

# 初始化FTE表的Adjusted_FTE列
FTE[, Adjusted_FTE := 0]

# 按FTE表的行顺序(优先级)遍历处理
for (i in 1:nrow(FTE)) {
  # 提取当前分组的规则和期望FTE
  group_col <- FTE$Group_Type[i]
  group_val <- FTE$Group_Value[i]
  desired_fte <- FTE$Cumulative_FTE_Desired[i]
  
  # 筛选未分配且符合当前分组条件的员工
  eligible_emps <- Employees[!Assigned & get(group_col) == group_val]
  
  # 计算实际可分配数量:取期望数和剩余符合条件员工数的最小值
  actual_assign <- min(desired_fte, nrow(eligible_emps))
  
  # 更新FTE表的Adjusted_FTE值
  FTE[i, Adjusted_FTE := actual_assign]
  
  # 标记这些员工为已分配,后续分组不再纳入筛选范围
  if (actual_assign > 0) {
    Employees[Name %in% eligible_emps$Name[1:actual_assign], Assigned := TRUE]
  }
}

验证结果

运行后查看FTE表,会得到符合需求的Adjusted_FTE:

print(FTE)
#    Group_Type Group_Value Cumulative_FTE_Desired Adjusted_FTE
# 1: Job_Title      Manager                      2            2
# 2:   Location    New York                      5            3  # 前2个Manager已分配,纽约剩余符合条件的员工为3人

员工表的Assigned列会清晰标记出已被分配的人员,方便后续核对。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 01:06:17