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

如何基于category是否包含于mix_category关联base_table与value_table

基于字符匹配的表关联实现(R tidyverse)

先定义两张原始数据表:

library(tidyverse)

base_table <- data.frame(mix_category = c('ABC','WE','CF','Z236'))
#   mix_category
# 1          ABC
# 2           WE
# 3           CF
# 4         Z236

value_table <- data.frame(category = c('A','F','W','E','C','2'),
                          value = c('1','2','3','6','0','-1'))
#   category value
# 1        A     1
# 2        F     2
# 3        W     3
# 4        E     6
# 5        C     0
# 6        2    -1

需求1:返回首个匹配的category和value

若mix_category中能匹配到category,返回value_table里第一个匹配的对应字段,期望结果如下:

#   mix_category category value
# 1          ABC        A     1
# 2           WE        W     3
# 3           CF        C     0
# 4         Z236        2    -1

实现代码

base_table %>%
  mutate(
    category = map_chr(mix_category, ~ value_table$category[str_detect(.x, value_table$category)][1]),
    value = map_chr(category, ~ value_table$value[value_table$category == .x])
  )

核心逻辑:对每个mix_category,用str_detect筛选出所有匹配的category,取第一个结果;再根据该category关联对应的value值。

需求2:返回所有匹配结果并拼接

若mix_category中匹配到多个category,将所有匹配的category和value分别用_拼接成字符串,期望结果如下:

#   mix_category category value
# 1          ABC      A_C   1_0
# 2           WE      W_E   3_6
# 3           CF      C_F   0_2
# 4         Z236        2    -1

实现代码

base_table %>%
  mutate(
    category = map_chr(mix_category, ~ paste(value_table$category[str_detect(.x, value_table$category)], collapse = "_")),
    value = map_chr(category, ~ paste(value_table$value[value_table$category %in% str_split(.x, "_")[[1]]], collapse = "_"))
  )

核心逻辑:对每个mix_category,先筛选出所有匹配的category并拼接成字符串;再拆分拼接后的category,关联对应的value值后再次拼接。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 13:02:07