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

在R语言中识别供应商连续交易ID(含字母数字格式)

识别连续交易ID并提取分组数据

针对交易ID存在纯数字、字母数字混合两种格式的情况,可通过以下步骤按供应商筛选出交易ID连续出现X次的分组数据:

核心思路

  1. 拆分交易ID为字母前缀和数字主体,统一提取可用于判断连续性的数字部分;
  2. 按供应商分组,验证分组内数字序列是否连续(相邻数字差为1)且长度达标;
  3. 提取所有符合条件的分组行数据。

代码实现(R语言)

1. 数据准备与预处理

# 加载字符串处理包(未安装则先执行 install.packages("stringr"))
library(stringr)

# 导入原始数据并整理列名
df <- read.table(text=
"Vendor        'Transaction ID'
 ACME               1
 ACME               2
 ACME               3
 JDOE               A1
 JDOE               A6
 JDOE               A10
 XYZ                B12
 XYZ                B13
 XYZ                B14", header=TRUE)
colnames(df) <- c("Vendor", "TransactionID")

2. 拆分交易ID的前缀与数字部分

用正则表达式分离两种格式的交易ID,提取可用于判断连续性的数字:

df <- df %>%
  mutate(
    # 提取前缀(纯数字交易ID的前缀为空字符串)
    Prefix = str_extract(TransactionID, "^\\D*"),
    # 提取数字部分并转为整数
    Num = as.integer(str_extract(TransactionID, "\\d+"))
  )

3. 筛选符合连续条件的供应商分组

设定连续次数阈值X(示例设为3,可按需修改),筛选出满足条件的供应商并提取对应行:

# 设定连续次数阈值
X <- 3

# 筛选符合条件的供应商
valid_vendors <- df %>%
  group_by(Vendor) %>%
  arrange(Num) %>%  # 按数字排序,确保顺序正确
  mutate(
    # 验证序列是否连续
    is_consecutive = all(diff(Num) == 1),
    # 获取分组内交易数量
    group_size = n()
  ) %>%
  filter(is_consecutive & group_size >= X) %>%
  pull(Vendor) %>%
  unique()

# 提取所有符合条件的行(可选择保留或删除临时列)
result <- df %>% filter(Vendor %in% valid_vendors)

# 输出结果(仅保留原列)
print(result %>% select(Vendor, TransactionID))

运行后将输出:

Vendor TransactionID
1   ACME              1
2   ACME              2
3   ACME              3
4    XYZ             B12
5    XYZ             B13
6    XYZ             B14

扩展说明

  • 若同一个供应商存在多组不同前缀的连续交易ID(如同时有A1-A3和B5-B7),需按Vendor + Prefix分组判断,只需将group_by(Vendor)改为group_by(Vendor, Prefix)即可;
  • 阈值X可灵活调整,比如要识别连续2次及以上的序列,将X设为2即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 18:45:55