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

如何在R中解析单列数据,识别含多个真实采购订单的行?

在R中识别含多个采购订单的行

首先,咱们得先明确什么是有效采购订单(PO),从你的示例来看,PO主要有几种典型格式:

  • 纯6位数字(比如123456)
  • 三段式带连字符的格式(比如ABC-123-XYZ)
  • 带PO#或PO前缀的单个订单(比如PO#124、PO1234A)

而像Row4里的LD6975A更像发货编号,不属于PO范畴。接下来咱们就基于这些特征,一步步实现需求。

步骤1:模拟你的数据

先把示例内容转换成R可处理的数据框:

library(tidyverse)

# 创建示例数据
df <- tibble(
  myvalues = c(
    "123456 556613 456826",
    "My PO#124 is the last one",
    "ABC-123-XYZ DEF-789-JJJ LMQ-529-333",
    "PO1234A LD6975A SHIPPED"
  )
)

步骤2:定义有效PO的正则规则

结合示例里的PO格式,我们可以把匹配规则合并成一个正则表达式,用|分隔表示“或”:

# 匹配三种有效PO格式的正则
po_pattern <- "\\b\\d{6}\\b|\\b[A-Z]+-[0-9]+-[A-Z0-9]+\\b|\\bPO#?[A-Z0-9]+\\b"
  • \\b\\d{6}\\b:匹配独立的6位纯数字PO
  • \\b[A-Z]+-[0-9]+-[A-Z0-9]+\\b:匹配三段式带连字符的PO
  • \\bPO#?[A-Z0-9]+\\b:匹配带PO或PO#前缀的PO

步骤3:统计PO数量并筛选目标行

用stringr::str_count()统计每行的有效PO数量,再筛选出数量≥2的行:

# 统计PO数量并筛选
result <- df %>%
  mutate(po_count = str_count(myvalues, po_pattern)) %>%
  filter(po_count >= 2)

# 查看结果
result

运行后会得到你想要的行:

# A tibble: 2 × 2
  myvalues                              po_count
  <chr>                                     <int>
1 123456 556613 456826                          3
2 ABC-123-XYZ DEF-789-JJJ LMQ-529-333           3

补充:适配更多PO格式

如果你的实际数据里还有其他PO格式,只需要修改po_pattern里的正则规则就行。比如如果有带P.O.前缀的PO,就把规则扩展成\\bP\\.?O\\.?#?[A-Z0-9]+\\b。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:37:47