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

在R中如何提取dataframe字符串内数字前的大写国家缩写

R实现提取多列字符串中数字前的国家缩写

实现思路

  • 先将每行所有列的字符串拼接为一个完整字符串,避免跨列匹配遗漏
  • 基于给定的国家缩写列表构造正则匹配规则,捕获数字前最近出现的目标大写国家缩写
  • 按行遍历处理后将结果存入新列

完整代码

首先构造示例数据与国家代码向量:

TD <- data.frame(
  a = c("WHATEVERDE 11111","","Whatever DE 11111","DE 11111",""), 
  b = c("","What DE EverDE 1111","","",""),
  c = c("Whatever","","","","WhateverDE 11111")
)

# 避免和R内置函数names重名,将国家代码向量重命名为country_codes
country_codes <- c('AT','BE','DE','BG','CZ','DK','FR','GR','ES','NL','HU','GB','IT')

核心处理逻辑:

# 构造匹配正则:贪婪匹配到数字前最近的目标国家大写缩写
pattern <- paste0(".*(", paste(country_codes, collapse = "|"), ")[^0-9]*\\d.*")

# 按行处理提取结果
TD$result <- apply(TD, 1, function(row) {
  row_total <- paste(row, collapse = " ")
  ifelse(grepl(pattern, row_total), sub(pattern, "\\1", row_total), "")
})

输出验证

打印处理后的TD即可得到和预期完全一致的结果:

> TD
                  a                   b                c result
1  WHATEVERDE 11111                             Whatever     DE
2                   What DE EverDE 1111                  DE
3 Whatever DE 11111                                              DE
4          DE 11111                                              DE
5                                       WhateverDE 11111     DE

正则说明

  • .* 为贪婪匹配,会优先匹配最长的前缀,确保捕获的是数字前最后一个出现的目标国家缩写
  • 括号()内为所有目标国家缩写的可选集合
  • [^0-9]* 匹配国家缩写和数字之间所有的非数字字符(包括空格、其他字母等)
  • \\d 匹配后续的数字,确保捕获的国家缩写位于数字之前

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 07:06:04