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

R语言实现类COUNTIFS功能统计经理直接下属人数

R语言实现等价Excel COUNTIFS函数统计直接下属人数

问题场景

需要统计每位员工作为直属经理对应的直接下属人数,等价于Excel中COUNTIFS函数的条件计数效果。此前尝试group_by搭配length函数实现未得到正确结果,测试用数据如下:

  • 员工(employee)字段取值:a、b、c、d、e、f、g、h
  • 直属经理(manager)字段取值:g、a、a、a、b、b、e、c
  • 预期直接下属数(direct report)输出:3、2、1、0、1、0、0、0

实现方法

方法1:base R 原生实现(最贴合COUNTIFS逻辑)

核心逻辑和Excel COUNTIFS完全一致:逐行统计「经理列等于当前员工ID」的记录数,无匹配时返回0,不需要加载第三方包。
首先构造测试数据:

# 构造示例数据集
emp_df <- data.frame(
  employee = letters[1:8],
  manager = c("g", "a", "a", "a", "b", "b", "e", "c")
)

运行计数代码:

# 逐行匹配计数,等价于Excel =COUNTIFS(B:B,A2) 下拉填充
emp_df$direct_report <- sapply(emp_df$employee, \(emp_id) sum(emp_df$manager == emp_id))

运行后直接得到预期输出,不需要额外做缺失值填充。

方法2:dplyr 分组实现(修正此前group_by写法的错误)

之前用group_by+length出问题的核心原因:仅对manager列分组计数时,只会统计有下属的经理的数值,没有下属的员工不会出现在分组结果里,自然无法得到全量员工的0值计数。正确写法需要把分组计数结果关联回全量员工表,补全0值:

library(dplyr)
library(tidyr)

emp_df <- emp_df %>%
  # 先统计每个经理名下的下属数量
  count(manager, name = "temp_count") %>%
  # 右连接回原员工表,保留所有员工记录
  right_join(emp_df, by = c("manager" = "employee")) %>%
  # 无下属的员工计数填充为0
  mutate(direct_report = replace_na(temp_count, 0)) %>%
  # 保留需要的列,还原原表顺序
  select(employee, manager, direct_report)

注意:如果是多条件计数的COUNTIFS场景,只需要在sum判断里追加条件即可,比如要统计部门为销售、且直属经理为当前员工的人数,写法为sum(emp_df$manager == emp_id & emp_df$dept == "销售"),逻辑和Excel COUNTIFS多参数条件完全对齐。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 18:06:19