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

如何用另一列匹配的完整名称替换首字母缩写(保留特定缩写)?

R语言数据框缩写替换实现方案

原始数据

给定如下R语言数据框:

data <- data.frame(
  name = c("Acorus americanus", "Nothocalais cuspidata", "Elymus repens", "Elymus hmmmm", "Acorus americanus"),
  synonym = c("A. calamus", "Agoseris cuspidata", "Agropyron r.", "Elymus sp.", "S. americanus")
)

输出结果:

name            synonym
1     Acorus americanus         A. calamus
2 Nothocalais cuspidata Agoseris cuspidata
3         Elymus repens       Agropyron r.
4          Elymus hmmmm         Elymus sp.
5     Acorus americanus      S. americanus

需求说明

需要对synonym列执行以下替换规则:

  • 将单个字母加句号的首字母缩写,替换为对应行name列中首字母匹配的完整单词
  • 保留sp.、var.、ssp.这类固定缩写,不做替换
  • 若name列中没有首字母匹配的单词,保留原缩写

期望结果

处理后的数据框如下:

name            synonym
1     Acorus americanus     Acorus calamus
2 Nothocalais cuspidata Agoseris cuspidata
3         Elymus repens   Agropyron repens 
4          Elymus hmmmm         Elymus sp.
5     Acorus americanus      S. americanus

解决方案

可以结合dplyr和stringr包实现需求,代码如下:

library(dplyr)
library(stringr)

# 原始数据
data <- data.frame(
  name = c("Acorus americanus", "Nothocalais cuspidata", "Elymus repens", "Elymus hmmmm", "Acorus americanus"),
  synonym = c("A. calamus", "Agoseris cuspidata", "Agropyron r.", "Elymus sp.", "S. americanus")
)

# 定义无需替换的特殊缩写集合
keep_abbr <- c("sp.", "var.", "ssp.")

# 自定义缩写替换函数
replace_abbr <- function(name_str, synonym_str) {
  # 拆分当前行name字段的所有单词
  name_words <- str_split(name_str, "\\s+")[[1]]
  # 匹配所有单个字母加句号的独立缩写
  matches <- str_extract_all(synonym_str, "\\b[A-Za-z]\\.(?!\\w)")[[1]]
  
  for (abbr in matches) {
    # 跳过需要保留的特殊缩写
    if (abbr %in% keep_abbr) next
    # 提取缩写的首字母
    first_char <- str_sub(abbr, 1, 1)
    # 从name的单词中筛选首字母匹配的项
    match_word <- name_words[str_sub(name_words, 1, 1) == first_char]
    # 找到匹配项则替换缩写
    if (length(match_word) > 0) {
      synonym_str <- str_replace_all(synonym_str, fixed(abbr), match_word[1])
    }
  }
  return(synonym_str)
}

# 逐行应用替换函数生成结果
result <- data %>%
  mutate(synonym = mapply(replace_abbr, name, synonym))

# 打印结果
print(result)

代码说明

  • keep_abbr:维护不需要替换的固定缩写列表,可根据实际需求扩展
  • replace_abbr函数:逐行处理每一对name和synonym,先拆分name的单词,再识别目标缩写,匹配到对应单词后完成替换
  • mapply:实现逐行传递name和synonym的值给处理函数,确保每行的替换基于自身的name字段

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 23:10:31