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

求助:利用Regex从DataFrame提取特定格式字段的技术实现

解决DataFrame中ISS字段提取与新DataFrame生成问题

我来帮你搞定这个问题!首先咱们先模拟一个符合你描述的示例DataFrame,这样能更清楚地演示处理步骤:

library(dplyr)
library(stringr)

# 构造示例数据
original_df <- tibble(
  ISS = c("ISS123", "ISS 4567", "ISS89", "ISS 101112"),
  label = c("A", "B", "C", "D"),
  ext1 = c(10, 20, 30, 40),
  ext2 = c("X", "Y", "Z", "W")
)

接下来,咱们的核心需求是从ISS字段中提取数字部分,同时保留label、ext1、ext2这些固定长度的字段。这里关键是用正则表达式处理ISS与数字之间有无空格的情况:

# 提取ISS字段的数字部分,并生成新DataFrame
new_df <- original_df %>%
  mutate(ISS_number = str_match(ISS, "ISS\\s?(\\d+)")[, 2]) %>%  # 提取捕获的数字组
  select(label, ext1, ext2, ISS_number)  # 按需要选择列顺序

# 查看结果
print(new_df)

关键部分解释:

  • 正则表达式"ISS\\s?(\\d+)":
    • ISS:精确匹配字段开头的固定文本
    • \\s?:匹配0个或1个空格(完美兼容"ISS"和数字之间有/无空格的情况)
    • (\\d+):捕获一个或多个连续数字,这就是我们需要提取的核心内容
  • str_match()函数会返回一个矩阵,第一列是整个匹配的字符串,第二列就是我们捕获的数字部分,所以用[,2]取出这部分内容

运行上面的代码后,你会得到一个包含label、ext1、ext2和提取出的ISS_number的新DataFrame,完全符合你的需求。

如果你的原始ISS字段还有其他特殊格式(比如数字后面还有其他字符),可以告诉我,咱们再调整正则表达式~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:14:34