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

在Databricks中用R检测目标词重复并输出二进制值

问题:检测字符串中目标词是否重复出现(Databricks R环境)

在Databricks环境中用R处理数据,现有目标词列表:

extract <- c("codeine", "tramadol", "fentanyl", "morphine")

需要判断字符串(比如示例"codeine with fentanyl oral")里有没有任一目标词重复出现,在新列返回1(有重复)或0(无重复)的二进制结果。试了三种方法都没完全解决问题:

尝试过的方法

  • 方法1:
df$testvar1 <- +(str_count(df$medname, fixed(extract))> 1)
  • 方法2:
df$testvar2 <- cSplit_e(df$medname, split.col = "String", sep = " ", type = "factor", mode = "binary", fixed = TRUE, fill = 0)
  • 方法3:
df$testvar3 <- str_extract_all(df$medname, paste(extract, collapse = " "))

可行解决方案

先说说之前方法的问题:

  • 方法1:str_count搭配fixed(extract)会把整个目标词向量当成一个整体匹配,没法逐个统计每个词的出现次数。
  • 方法2:cSplit_e只是拆分字符串生成二进制列,没法直接判断单个目标词是否重复出现。
  • 方法3:把目标词拼成空格分隔的字符串后,str_extract_all只会匹配这个整体,没法分别统计每个词的出现次数。

方案1:逐个统计目标词出现次数

用stringr包的str_count循环检查每个目标词,只要有一个词出现超过1次就返回1:

library(stringr)

# 定义检查单个字符串的函数
has_repeat_target <- function(str, targets) {
  # 统计每个目标词的出现次数,只要有一个>1就返回TRUE
  any(str_count(str, fixed(targets)) > 1)
}

# 给数据框添加结果列
df$has_repeat <- +sapply(df$medname, has_repeat_target, targets = extract)

方案2:拆分单词后统计词频(精确匹配完整单词)

如果需要避免部分匹配(比如不想把"codeines"当成"codeine"),可以先拆分字符串为单词,再筛选目标词统计次数:

library(stringr)
library(dplyr)

df <- df %>%
  mutate(
    # 按空格拆分字符串成单词列表
    med_word_list = str_split(medname, "\\s+"),
    # 检查列表中是否有目标词重复出现
    has_repeat = +sapply(med_word_list, function(words) {
      target_hits <- intersect(words, extract)
      any(table(target_hits) > 1)
    })
  ) %>%
  select(-med_word_list) # 可选:删除中间生成的列

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 06:30:37