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

如何在R语言中基于另一列将单词分组为字符串?

在R中高效实现NER标签的文本拼接

针对你的需求,完全可以通过向量化分组聚合实现,避免低效的循环,处理大数据集也能保持高效。以下是两种主流方法(基于你的data.table数据集,也提供tidyverse方案):

方法一:使用data.table(推荐,适合大数据集)

利用data.table的高效分组能力,结合cumsum生成分组ID,再拼接文本并处理特殊符号:

library(data.table)

# 为每个B开头的实体生成唯一分组ID
mydat[, group := cumsum(Tag == "B")]

# 分组拼接单词,同时处理"-"符号的格式
mystrings <- mydat[, gsub(" - ", "-", paste(Word, collapse = " ")), by = group]$V1

# 查看结果
mystrings

输出结果与你的期望完全一致:

[1] "Acanthosis nigricans"       "AN"                         "skin condition"            
[4] "hyperkeratosis of the skin" "AN"                         "obesity"                   
[7] "drug-induced AN"            "AN"                         "malignant AN" 

方法二:使用dplyr(tidyverse风格)

如果你习惯tidyverse语法,也可以用dplyr实现相同逻辑:

library(dplyr)

mystrings <- mydat %>%
  # 生成分组ID
  mutate(group = cumsum(Tag == "B")) %>%
  # 按分组聚合拼接文本
  group_by(group) %>%
  summarise(text = gsub(" - ", "-", paste(Word, collapse = " "))) %>%
  # 提取结果向量
  pull(text)

核心逻辑说明

  1. 分组ID生成:cumsum(Tag == "B")会在每次遇到Tag="B"时累加计数,自动将每个实体(B开头+后续所有I标签的单词)划分为同一个分组,这是实现高效聚合的关键。
  2. 文本拼接与格式处理:用paste(..., collapse=" ")将分组内的单词拼接成字符串,再通过gsub(" - ", "-", ...)把单独的-符号转换为连字符,符合你期望的drug-induced格式。

这种方法完全基于向量化操作,避免了逐行循环,在大数据集上的效率远高于手动遍历。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 01:55:34