按(a,b)分组取多列哑变量最大值的数据处理问题求助
解决方案:按分组对多列哑变量取最大值
针对你遇到的问题——用slice_max处理单列会丢失其他列的有效1值,其实不需要逐行筛选,直接对分组后的目标列取最大值就能满足需求,因为哑变量只有0和1,组内最大值就是"存在1则取1,全0则取0"的结果。
步骤示例
- 先构造你的示例数据集:
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) )
- 分组计算最大值:
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
相关产品推荐
相关产品推荐

