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

基于另一数据框的部分字符串匹配为DF1添加对应party.number列

解决方案:给DF1新增对应政党编号列

我来帮你搞定这个需求,咱们可以用tidyverse工具包一步步处理,核心思路是先拆分含多个政党的行,匹配到编号后再合并回原结构,具体操作如下:

1. 先加载必要的工具包

如果还没安装tidyverse,先执行安装命令:

install.packages("tidyverse")

然后加载包:

library(tidyverse)

2. 准备原始数据(方便复现验证)

先把你给出的DF1和DF2代码整理成更简洁的写法:

# 构建DF1
DF1 <- data.frame(parties = c("A, B","C","A","C, D"))

# 构建DF2
DF2 <- tibble(
  party = LETTERS[1:10],
  party.number = 1:10
)

3. 核心处理:拆分、匹配、合并编号

这一步是关键,我们通过临时行号来确保拆分后的数据能准确合并回原结构:

# 给DF1添加临时行号,用于后续匹配
DF1_with_id <- DF1 %>% mutate(row_id = row_number())

# 拆分多政党行 → 匹配编号 → 合并回逗号分隔格式
party_number_list <- DF1_with_id %>%
  # 按逗号拆分parties列,每行保留原行号
  separate_rows(parties, sep = ",") %>%
  # 清理政党名称前后的空格(比如"A, B"拆分后会出现" B")
  mutate(parties = str_trim(parties)) %>%
  # 左连接DF2,获取对应的政党编号
  left_join(DF2, by = c("parties" = "party")) %>%
  # 按原行号分组,把同组的编号合并成逗号分隔的字符串
  group_by(row_id) %>%
  summarise(party_numbers = str_c(party.number, collapse = ", ")) %>%
  ungroup()

# 把编号列合并回原始DF1,去掉临时行号
DF1_final <- DF1_with_id %>%
  left_join(party_number_list, by = "row_id") %>%
  select(-row_id)

4. 查看最终结果

运行完上述代码后,DF1_final就是你需要的结果:

> DF1_final
  parties party_numbers
1   A, B          1, 2
2       C              3
3       A              1
4   C, D          3, 4

这样就完美实现了给DF1新增对应政党编号列的需求啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:42:47