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

如何为DataFrame按订单添加Item及Source的唯一计数器列

按订单为商品和供应商添加独立唯一计数器

我明白你的需求啦——要给每个订单里的商品按出现顺序加ItemNum,同时给每个订单里的供应商按首次出现的顺序加SourceNum(同一个订单里同一个供应商编号保持一致)。用tidyverse就能轻松搞定,咱们直接看解决方案:

注意:你代码里加载的partitions包在这个需求中用不到,可以移除哦~

完整代码实现

library(tidyverse)

# 读取你的订单数据(这里直接构造示例数据,也可以用你原有的read_table方式)
df <- read_table('Order Item Source
1 100 Supplier1
1 101 Supplier1
1 102 Supplier2
1 106 Supplier3
2 107 Supplier4
2 108 Supplier4
3 104 Supplier5
3 103 Supplier6')

# 核心处理逻辑
result_df <- df %>%
  group_by(Order) %>%
  mutate(
    # 每个订单内,Item按行顺序生成递增的ItemNum
    ItemNum = row_number(),
    # 每个订单内,按Source首次出现的顺序生成编号,同一Source编号保持一致
    SourceNum = match(Source, unique(Source))
  ) %>%
  ungroup() # 取消分组,恢复普通数据框结构

# 查看最终结果
print(result_df)

输出结果

# A tibble: 8 × 5
  Order  Item Source    ItemNum SourceNum
  <dbl> <dbl> <chr>       <int>     <int>
1     1   100 Supplier1       1         1
2     1   101 Supplier1       2         1
3     1   102 Supplier2       3         2
4     1   106 Supplier3       4         3
5     2   107 Supplier4       1         1
6     2   108 Supplier4       2         1
7     3   104 Supplier5       1         1
8     3   103 Supplier6       2         2

代码逻辑说明

  • group_by(Order):按订单分组,确保所有计数都在单个订单内部独立计算,不会跨订单干扰
  • ItemNum = row_number():在每个订单组内,按行的先后顺序生成从1开始的递增数字,完美匹配你需要的ItemNum规则
  • SourceNum = match(Source, unique(Source)):unique(Source)会保留每个订单内供应商的首次出现顺序,match函数返回每个供应商在这个唯一列表中的位置,这样同一个供应商在同一个订单里会得到相同的编号,新出现的供应商编号自动递增

这样处理后就完全符合你期望的输出样式啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:02:56