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

R语言中如何将同时属于多部门的人员按0.5分别计入对应部门统计

R语言中如何将同时属于多部门的人员按0.5分别计入对应部门统计

你这个思路其实已经走对一半啦!拆分部门列确实是关键的第一步,接下来只需要把拆分后的宽格式数据转成长格式,再给每个部门行分配对应的权重,最后求和就能得到你想要的结果了。

结合你已经写好的代码,我们可以继续往下完善:

library(tidyverse)

# 承接你完成的部门拆分步骤
Grad_Applied_Formatted1 <- Grad_AppAccMat %>%
  separate_wider_delim(DEPT, "/", names = c("DEPT1", "DEPT2"), 
                       too_few = "align_start", cols_remove = FALSE)

# 转长格式并计算部门统计数
final_result <- Grad_Applied_Formatted1 %>%
  # 将拆分后的DEPT1、DEPT2转为单部门行,自动过滤空值
  pivot_longer(
    cols = starts_with("DEPT"), 
    names_to = "temp_col", 
    values_to = "DEPT_Clean", 
    values_drop_na = TRUE
  ) %>%
  # 按ID分组,计算每个ID对应的部门数量,得到权重
  group_by(`ID Number`) %>%
  mutate(weight = 1/n()) %>%
  ungroup() %>%
  # 按部门分组求和权重,得到最终统计
  group_by(DEPT_Clean) %>%
  summarize(Count = sum(weight)) %>%
  rename(DEPT = DEPT_Clean) # 重命名列名匹配目标输出

我来给你拆解下每一步的作用:

  • pivot_longer:把原来的宽格式(一行多个部门)转成长格式(一行一个部门),values_drop_na = TRUE会自动去掉那些只有单个部门时产生的空值行;
  • 按ID Number分组后,n()会返回每个ID对应的部门数量,weight = 1/n()就得到了每个部门应占的权重——比如ID18有2个部门,权重就是0.5;单个部门的ID权重就是1;
  • 最后按部门分组求和权重,就能得到每个部门的最终统计数,完全符合你想要的输出效果。

另外这个方案还有个好处:如果以后遇到一个人属于3个甚至更多部门的情况,代码不需要修改,依然能自动计算出对应的权重(比如3个部门就是1/3),通用性很强。

备注:内容来源于stack exchange,提问作者asokol

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.15 13:29:29