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

如何按分组筛选data.table中两无关列的综合最优行

问题描述

假设有如下data.table:

library(data.table)

dt <-
  rowwiseDT(
    group=, a=, b=,
    "a", 1, 10,
    "a", 10, 1,
    "a", 9, 9,
    "b", 9, 9,
    "b", 1, 1,
    "c", 10, 10
  )

原始数据输出:

group     a     b
   <char> <num> <num>
1:      a     1    10
2:      a    10     1
3:      a     9     9
4:      b     9     9
5:      b     1     1
6:      c    10    10

需要按group分组后每组保留一行,要求“最大化两个列a和b”,预期结果如下(比如a组选择a=9、b=9的行,尽管这不是两列各自的最大值):

group     a     b
   <char> <num> <num>
3:      a     9     9
4:      b     9     9
6:      c    10    10
解决方案

从预期结果判断,核心需求是选取每组中a和b的最小值最大的行(等价于a+b之和最大的行,本案例中两种逻辑结果一致)。以下是两种data.table实现方式:

方法1:基于最小列值最大化

dt[, .SD[which.max(pmin(a, b))], by = group]
  • pmin(a, b):计算每行a和b的最小值
  • which.max():定位分组内最小值最大的行索引
  • .SD[索引]:提取对应行作为分组结果

方法2:基于列值之和最大化

如果需求是优先让两列的和最大,可使用:

dt[, .SD[which.max(a + b)], by = group]

运行结果

两种方法执行后,输出均符合预期:

group  a  b
1:     a  9  9
2:     b  9  9
3:     c 10 10

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 10:17:02