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

如何用data.table生成按唯一class值计数的fid列以实现长表转宽?

用data.table创建分组计数的fid列

当然有啦!用data.table来实现这个分组内生成序号的需求超方便,核心是利用它的分组操作和内置变量.N(代表每个分组的行数),下面给你完整的代码示例和说明:

步骤1:准备数据(补全你提供的示例数据)

先把你的示例数据补全,方便演示:

library(data.table)
# 补全后的示例数据
df <- data.frame(
  class = c('1', '1', '1', '2', '3', '3'),
  A = 1:6,
  B = 1:6  # 补全B列的数值
)

步骤2:转换为data.table并生成fid列

直接用data.table的语法,按class分组后生成从1开始的序号列:

# 将data.frame转换为data.table(in-place修改,不占用额外内存)
setDT(df)

# 按class分组,生成fid列
df[, fid := seq_len(.N), by = class]

运行结果展示

执行完上面的代码后,查看数据框:

print(df)

输出会是这样:

class A B fid
1:     1 1 1   1
2:     1 2 2   2
3:     1 3 3   3
4:     2 4 4   1
5:     3 5 5   1
6:     3 6 6   2

关键说明

  • by = class:指定按照class列的唯一值进行分组
  • .N:data.table的内置变量,代表当前分组的行数
  • seq_len(.N):生成从1到当前分组行数的整数序列,正好满足你需要的“每个class唯一值从1计数到分组长度”的需求

如果你的数据一开始就是data.table对象,直接跳过setDT(df)这一步,直接执行分组赋值操作就行~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:23:17