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

基于R语言实现按区域、类型批量均等分配物品至人员

批量实现区域内物品均等分配的R方案

核心思路

复用你已有的单区域分配逻辑,通过分组处理或自定义函数+遍历实现批量自动化:

  1. 按「区域+物品类型」拆分数据
  2. 每组物品按value降序排序
  3. 匹配对应区域的人员列表,循环分配给物品
  4. 合并所有区域的分配结果

方案一:dplyr分组处理(推荐,tidyverse风格)

library(dplyr)

# 预整理:获取每个区域对应的唯一人员列表
area_people <- df2 %>%
  group_by(area) %>%
  summarise(people = list(unique(name))) %>%
  ungroup()

# 批量执行分配逻辑
final_result <- df1 %>%
  # 按区域和物品类型分组
  group_by(area, type) %>%
  # 对每组执行分配操作
  group_modify(function(.x, .y) {
    # 获取当前区域的人员列表
    current_people <- area_people %>%
      filter(area == .y$area) %>%
      pull(people) %>%
      unlist()
    
    # 按value降序排序,再分配人员
    .x %>%
      arrange(desc(value)) %>%
      mutate(name = rep(current_people, length.out = nrow(.x)))
  }) %>%
  ungroup()

方案二:自定义函数+显式遍历

如果你更习惯手动循环逻辑,可使用此方案:

library(dplyr)

# 定义单个区域的处理函数
process_single_area <- function(target_area) {
  # 获取当前区域的人员列表
  area_people <- df2 %>%
    filter(area == target_area) %>%
    pull(name) %>%
    unique()
  
  # 处理当前区域所有类型的物品
  df1 %>%
    filter(area == target_area) %>%
    group_by(type) %>%
    arrange(desc(value)) %>%
    mutate(name = rep(area_people, length.out = nrow(.))) %>%
    ungroup()
}

# 获取所有唯一区域
all_areas <- unique(df1$area)

# 遍历所有区域并合并结果(两种方式二选一)
# 方式1:用purrr包更简洁
final_result <- purrr::map_dfr(all_areas, process_single_area)

# 方式2:base R循环
# final_result <- data.frame()
# for (area in all_areas) {
#   area_result <- process_single_area(area)
#   final_result <- rbind(final_result, area_result)
# }

分配均匀性验证

可通过以下代码检查每个区域内,各人员分配到的各类型物品数量:

final_result %>%
  group_by(area, name, type) %>%
  summarise(item_count = n()) %>%
  ungroup()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 07:01:16