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

R语言优化:从水质样本站点描述中提取水体名称

水体名称提取优化方案

问题分析

原代码存在两个核心缺陷:

  1. 正则仅匹配单个前置单词,无法覆盖多词组成的水体名称(如RED ROBIN CREEK);
  2. 对缩写R的匹配规则不合理(原代码用带前后空格的" R ",且未匹配FORDING R这类仅单个空格分隔的场景)。

优化后代码实现

library(stringr)

wbod_data<- data.frame(smpl_ID = c(1, 2, 3, 4, 5),
                       site_loc = c("Nile River at bridge", "MC-M1", "Red ROBIN CREEK 30 M D_S OF STP", "PT068 SCUTTLE LK #2", "FORDING R BELOW HARE CREEK"),
                       waterbody = c(NA, NA, NA, NA, NA))

# 定义水体类型关键词,包含全称和缩写
water_types <- c("River", "R", "CREEK", "LK")
# 构建正则模式:匹配1个或多个前置单词,后跟水体类型,忽略大小写
pattern <- paste0("(?i)(\\w+\\s+)*(", paste(water_types, collapse = "|"), ")\\b")

# 提取并清理结果
wbod_data$waterbody <- str_extract(wbod_data$site_loc, pattern)
wbod_data$waterbody <- str_trim(wbod_data$waterbody)

print(wbod_data$waterbody)

关键优化点说明

  • 多词名称适配:(\\w+\\s+)*匹配0个或多个“单词+空格”组合,支持提取RED ROBIN CREEK这类多词组成的水体名称。
  • 缩写R处理:将R加入关键词列表,用\\b确保匹配独立的R(避免误匹配其他单词中的字母),(?i)启用大小写不敏感,兼容不同格式的写法。
  • 空格清理:str_trim()去除提取结果前后的冗余空格,保证输出格式整洁。

运行结果

[1] "Nile River"      NA                "Red ROBIN CREEK" "SCUTTLE LK"      "FORDING R"

扩展处理(多水体提及场景)

如果一行中存在多个水体名称(如FORDING R BELOW HARE CREEK),需要提取所有匹配项时,可替换为str_extract_all:

wbod_data$waterbody_all <- str_extract_all(wbod_data$site_loc, pattern)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 18:45:41