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

R语言如何高效合并键值包含在另一数据框字符串内的dataframe

员工福利匹配最优实现方案

核心思路

  • 先对ben表的benefit_id字段做拆分,将空格分隔的多ID展开为一行对应单个福利ID的长表
  • 用展开后的ben长表和emp表的salary ID字段做关联匹配,直接得到每位员工对应的所有适用福利
  • 该方案时间复杂度为O(n),大小数据集都能高效运行,代码可读性和可维护性都最优

推荐实现(tidyverse 方案,最简洁通用)

library(tidyverse)

# 拆分ben表的空格分隔福利ID为长格式
ben_long <- ben %>%
  separate_rows(benefit_id, sep = "\\s+")

# 匹配合并,保留所有员工信息,无对应福利的员工benefit列显示NA
emp_benefit <- emp %>%
  left_join(ben_long, by = c("salary" = "benefit_id"))

# 若仅需要保留有对应福利的员工,将left_join替换为inner_join即可

基础R实现(无需加载第三方包)

# 拆分benefit_id并生成长结构ben表
ben_long <- data.frame(
  benefit = rep(ben$benefit, lengths(strsplit(ben$benefit_id, "\\s+"))),
  benefit_id = unlist(strsplit(ben$benefit_id, "\\s+"))
)

# 合并匹配,all.x=TRUE对应保留所有员工记录
emp_benefit <- merge(emp, ben_long, by.x = "salary", by.y = "benefit_id", all.x = TRUE)

两种方案输出的结果完全一致,tidyverse方案写法更简洁、后续调整逻辑的成本更低,是绝大多数场景下的最优选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 23:27:04