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

按(a,b)分组取多列哑变量最大值的数据处理问题求助

解决方案:按分组对多列哑变量取最大值

针对你遇到的问题——用slice_max处理单列会丢失其他列的有效1值,其实不需要逐行筛选,直接对分组后的目标列取最大值就能满足需求,因为哑变量只有0和1,组内最大值就是"存在1则取1,全0则取0"的结果。

步骤示例

  1. 先构造你的示例数据集:
library(dplyr)

df <- tibble(
  a = c("a1", "a1", "a1", "a1", "a2", "a2", "a2"),
  b = c("b1", "b1", "b2", "b2", "b3", "b3", "b4"),
  c = c(1, 0, 0, 1, 1, 1, 0),
  d = c(0, 1, 1, 0, 0, 0, 0)
)
  1. 分组计算最大值:
result <- df %>%
  group_by(a, b) %>%
  summarize(
    c = max(c),
    d = max(d),
    .groups = "drop"  # 取消分组状态,得到普通数据框
  )

运行后得到的结果就是你要的预期输出:

# A tibble: 4 × 4
  a     b         c     d
  <chr> <chr> <dbl> <dbl>
1 a1    b1        1     1
2 a1    b2        1     1
3 a2    b3        1     0
4 a2    b4        0     0

为什么这个方法可行?

  • 哑变量只有0和1两个值,max()函数会直接返回组内的最大值:只要组内有1,结果就是1;全为0则返回0,完全匹配你的需求。
  • 相比slice_max逐行筛选,summarize直接聚合计算,不会丢失其他列的有效信息,一步就能得到每组的最终结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 03:35:54