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

R语言:如何正确计算两期员工ID字符串中的新增员工数量?

问题:统计时间段内新增员工数量出错

需要统计管理者在时间段1到时间段2内新增的员工数量,现有管理者下属所有员工ID组成的字符串(以“, ”分隔)。编写的代码始终显示新增1个员工,但实际应为2个(Q3新增55555和66666),如何修正?

原始代码:

library(dplyr)
library(stringr)

#First data set
mydata_q2 <- tibble(
  leader = 1,
  reports_q2 = "2222, 3333, 4444"
) 

#Second dataset
mydata_q3 <- tibble(
  leader = 1,
  reports_q3 = "2222, 3333, 4444, 55555, 66666" 
) 

#Function to count number of new employees
calculate_number_new_emps <- function(reports_time1, reports_time2) {
  time_1_reports <- ifelse(is.na(reports_time1), character(0), str_split(reports_time1, " ,\\s*")[[1]])
  time_2_reports <- str_split(reports_time2, " ,\\s*")[[1]]
  num_new_employees <- length(setdiff(time_1_reports, time_2_reports))
  num_new_employees
}

#Join data and count number of new staff--get wrong answer
mydata_q2 %>%
  left_join(mydata_q3) %>%
  mutate(new_staff_count = calculate_number_new_emps(reports_q2, reports_q3))

错误原因

  • 分隔符正则表达式错误:str_split中使用的分隔符是" ,\\s*"(先空格后逗号),但实际字符串的分隔是", "(先逗号后空格),导致无法正确分割员工ID,最终每个时间段的员工ID被当作单个字符串处理。
  • 集合差集顺序错误:setdiff(time_1_reports, time_2_reports)计算的是时间段1有但时间段2没有的员工,而我们需要的是时间段2新增的(即时间段2有但时间段1没有的),顺序完全搞反了。

修正后的代码

library(dplyr)
library(stringr)

mydata_q2 <- tibble(
  leader = 1,
  reports_q2 = "2222, 3333, 4444"
) 

mydata_q3 <- tibble(
  leader = 1,
  reports_q3 = "2222, 3333, 4444, 55555, 66666" 
) 

calculate_number_new_emps <- function(reports_time1, reports_time2) {
  # 修正分隔符,用str_split_1直接返回向量,无需手动取[[1]]
  time_1_reports <- ifelse(is.na(reports_time1), character(0), str_split_1(reports_time1, ",\\s*"))
  time_2_reports <- str_split_1(reports_time2, ",\\s*")
  # 调整setdiff顺序,取time_2有但time_1没有的元素,即新增员工
  num_new_employees <- length(setdiff(time_2_reports, time_1_reports))
  num_new_employees
}

# 运行后得到正确的new_staff_count=2
mydata_q2 %>%
  left_join(mydata_q3) %>%
  mutate(new_staff_count = calculate_number_new_emps(reports_q2, reports_q3))

额外优化说明

  • 使用str_split_1替代str_split(...)[[1]],代码更简洁,直接返回分割后的字符向量。
  • 保留NA处理逻辑,确保当时间段1没有员工数据时,能正确统计时间段2的所有员工为新增。

内容的提问来源于stack exchange,提问作者J.Sabree

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 02:55:05