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

如何在ValueB为0时按Group1和Group2分组计算ValueA的和

解决方案

可以使用dplyr包实现需求,步骤如下:

1. 准备数据

先定义原始数据框:

library(dplyr)

df <- data.frame(Group1 = c("A", "A", "A", "A"),
                 Group2 = c("X", "X", "X", "Y"),
                 ValueA = c(20, 40, 50, 80),
                 ValueB = c(0, 0, 70, 60))

2. 分组计算并生成目标列

通过分组操作,先计算每个组内ValueB == 0的ValueA总和,再根据每行的ValueB值决定是否填充该总和:

df_result <- df %>%
  group_by(Group1, Group2) %>%
  mutate(
    # 计算当前组内ValueB为0的ValueA总和
    group_sum = sum(ValueA[ValueB == 0], na.rm = TRUE),
    # 仅当当前行ValueB为0时使用组总和,否则为0
    SumA_whenBis0 = ifelse(ValueB == 0, group_sum, 0)
  ) %>%
  # 移除中间辅助列
  select(-group_sum) %>%
  ungroup()

print(df_result)

运行后输出结果与期望一致:

# A tibble: 4 × 5
  Group1 Group2 ValueA ValueB SumA_whenBis0
  <chr>  <chr>   <dbl>  <dbl>         <dbl>
1 A      X          20      0            60
2 A      X          40      0            60
3 A      X          50     70             0
4 A      Y          80     60             0

代码说明

  • group_by(Group1, Group2):按指定的两个变量分组
  • sum(ValueA[ValueB == 0], na.rm = TRUE):筛选组内ValueB为0的行,对对应ValueA求和,na.rm = TRUE确保无符合条件行时返回0
  • ifelse(ValueB == 0, group_sum, 0):判断当前行ValueB是否为0,是则填充组总和,否则填充0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 17:20:31