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

在R语言中按多条件分组获取BRR字段的最大值

按规则计算分组BRR最大值

原始数据

首先创建目标数据框:

ID <- c('A','A','A','A','A','A','A','A','A','A','A','A','A','A','A','A' )
BRR <- c(62,57,66,53,54,50,55,65,71,53,51,50,58,54,55,57)
val1 <- c(1,1,1,1,1,1,1,2,2,2,3,3,3,3,3,3)
val2 <- c(0,0,0,0,0,0,0,1,1,1,2,2,2,2,2,2)

df <- data.frame(ID, BRR, val1, val2)

数据框输出结果:

ID BRR val1 val2
1   A  62    1    0
2   A  57    1    0
3   A  66    1    0
4   A  53    1    0
5   A  54    1    0
6   A  50    1    0
7   A  55    1    0
8   A  65    2    1
9   A  71    2    1
10  A  53    2    1
11  A  51    3    2
12  A  50    3    2
13  A  58    3    2
14  A  54    3    2
15  A  55    3    2
16  A  57    3    2

需求说明

需要新增一列max_val_KP,规则如下:

  • 当val2 = 0时,max_val_KP赋值为0
  • 当val2 ≠ 0时,取当前行所在ID + val1分组的BRR最大值
  • 数据中val2始终比同组的val1小1

错误代码分析

你尝试的两段代码存在逻辑问题:

  1. 第一段代码中filter(va1 == val2)存在拼写错误(va1应为val1),且数据中val2始终比val1小1,该过滤条件永远不成立,最终会得到空数据框。
  2. 第二段代码按ID, val1 == val2分组,由于所有行的val1都不等于val2,最终只会生成一个分组,计算出的是整个数据的BRR最大值,不符合分组需求。

正确解决方案

使用dplyr按以下步骤实现:

  1. 按ID和val1分组,计算每组的BRR最大值
  2. 根据val2的值判断赋值:val2=0时设为0,否则用分组最大值
  3. 清理临时列,得到最终结果

代码如下:

library(dplyr)

df_result <- df %>%
  # 按ID和val1分组,计算每组BRR最大值
  group_by(ID, val1) %>%
  mutate(group_max = max(BRR)) %>%
  ungroup() %>%
  # 根据val2规则赋值max_val_KP
  mutate(max_val_KP = ifelse(val2 == 0, 0, group_max)) %>%
  # 移除临时计算列
  select(-group_max)

最终输出结果:

ID BRR val1 val2 max_val_KP
1   A  62    1    0          0
2   A  57    1    0          0
3   A  66    1    0          0
4   A  53    1    0          0
5   A  54    1    0          0
6   A  50    1    0          0
7   A  55    1    0          0
8   A  65    2    1         71
9   A  71    2    1         71
10  A  53    2    1         71
11  A  51    3    2         58
12  A  50    3    2         58
13  A  58    3    2         58
14  A  54    3    2         58
15  A  55    3    2         58
16  A  57    3    2         58

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 07:20:47