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

如何在data.table中实现排序、分组、mutate操作复现dplyr效果

问题原因

你写的data.table代码和dplyr逻辑执行顺序不一致,核心问题是没有保证同id分组内的行是按date升序排列后再取首尾值:

  • dplyr执行顺序:按id分组 → 组内按date排序 → 计算组内首尾值 → 全局按date排序输出
  • 你写的data.table执行顺序:全局按date排序 → 按id分组 → 取原顺序的组内首尾值 → 输出时不会额外排序

修正代码

两种常用写法都可以得到和dplyr一致的结果:

写法1:分组后指定按date排序取首尾

setDT(test_df)[, `:=`(
  Amt_first = first(Amount[order(date)]),
  Amt_last = last(Amount[order(date)])
), by = id][order(date)]

写法2:先按id+date全局排序再分组计算

setDT(test_df)[order(id, date), `:=`(
  Amt_first = first(Amount),
  Amt_last = last(Amount)
), by = id][order(date)]

补充说明

如果不想原位修改原数据集,可以先拷贝一份再操作:

test_dt <- copy(setDT(test_df))
# 后续操作在test_dt上执行即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 19:24:00