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

如何在R中新建变量,其值取自与指定向量匹配的另一列变量

解决方案

完全可以实现,以下是两种常用实现方式,均可满足需求:

前置准备:构造示例数据

# 示例数据框
df <- data.frame(
  Names = c("milk", "pizza with tomato", "tuna with olive and beans"),
  Price = c(10, 30, 25)
)
# 匹配关键词向量
x <- c("milk", "pizza", "tuna")

方案1:tidyverse生态(代码最简洁)

借助stringr包的字符串提取能力实现,适合已经在用tidyverse系列工具的场景:

library(tidyverse)

df <- df %>%
  mutate(
    # 把关键词拼接为正则“或”逻辑,直接提取匹配到的内容
    tag = str_extract(Names, paste(x, collapse = "|"))
  )

方案2:基础R实现(无需额外安装包)

适合不想加载第三方包的场景:

df$tag <- sapply(df$Names, function(name) {
  # 匹配所有命中的关键词
  matched_key <- x[sapply(x, function(key) grepl(key, name, fixed = TRUE))]
  # 取第一个命中结果,无匹配返回空值
  return(ifelse(length(matched_key) > 0, matched_key[1], NA_character_))
}, USE.NAMES = FALSE)

最终输出效果

执行完两种方案的任意一种,得到的结果如下:

NamesPricetag
milk10milk
pizza with tomato30pizza
tuna with olive and beans25tuna

注意事项

  • 如需忽略大小写匹配,把正则拼接部分改成paste0("(?i)", paste(x, collapse = "|"))即可
  • 单个产品名匹配到多个关键词时,默认返回第一个命中的结果;需要返回所有匹配结果可替换为str_extract_all自行拼接
  • 如果关键词包含正则特殊字符(如.、*、+等),建议优先用基础R方案的fixed = TRUE参数,避免匹配异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 16:57:02