在R中规范化员工数据:构建经理关系DataFrame
生成经理-下属映射表的R实现方案
针对你的需求,我们可以通过tidyverse工具包快速处理原数据集,生成包含employee_id(下属ID)和manager_id(管理者ID)的经理表。以下是具体步骤:
1. 导入可复现测试数据
首先把你提供的测试数据加载到R环境中:
test <- structure(list(first_name = c("Carrol", "Scott", "Michael", "Mary", "Jane", "Alex"), last_name = c("Dhin", "Peters", "Scott", "Smith", "Johnson", "Barter"), employee_id = c(412153L, 534253L, 643645L, 765453L, 627234L, 174543L), email = c("carrol.dhin@company.com", "scott.peters@company.com", "michael.scott@company.com", "mary.smith@company.com", "jane.johnson@company.com", "alex.barter@company.com"), managing = c("174543", "", "", "", "534253, 643645", ""), department = c("Accounting", "Sales", "Sales", "Marketing", "Sales", "Accounting"), department_budget = c(500000L, 1100000L, 1100000L, 750000L, 1100000L, 500000L), serial_number = c("KX6234", "FS5235", "LP5242", "GK6246", "KX6902", "BN7451"), manufacturer = c("Lenovo", "Lenovo", "Lenovo", "Lenovo", "Lenovo", "Lenovo"), model = c("X1 Gen 10", "T14s", "P1", "X1 Gen 10", "T15", "T14s"), date_assigned = c(44576L, 44471L, 44341L, 44681L, 44606L, 44378L), installed_software = c("MS Office, Adobe Acrobat, Slack", "MS Office", "Mathcad, Adobe Acrobat", "", "MS Office, Slack", "Google Chrome")), class = "data.frame", row.names = c(NA, -6L ))
2. 数据处理步骤(使用tidyverse)
通过以下代码过滤、拆分、整理数据,得到目标经理表:
# 若未安装tidyverse,先执行安装:install.packages("tidyverse") library(tidyverse) manager_table <- test %>% # 筛选出有下属的管理者(排除managing列为空的行) filter(managing != "") %>% # 将多个下属ID拆分为单独行 separate_rows(managing, sep = ", ") %>% # 转换下属ID为数值型,与原employee_id类型统一 mutate(employee_id = as.integer(managing)) %>% # 保留需要的列,将管理者的ID重命名为manager_id select(employee_id, manager_id = employee_id.x) %>% # 确保manager_id为整数型 mutate(manager_id = as.integer(manager_id))
3. 查看最终结果
运行代码后,manager_table即为符合要求的经理表:
print(manager_table) # employee_id manager_id # 1 174543 412153 # 2 534253 627234 # 3 643645 627234
结果对应关系:
- Carrol(ID:412153)管理Alex(ID:174543)
- Jane(ID:627234)管理Scott(ID:534253)和Michael(ID:643645)
内容的提问来源于stack exchange,提问作者amatof
相关产品推荐
相关产品推荐

