如何在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确保无符合条件行时返回0ifelse(ValueB == 0, group_sum, 0):判断当前行ValueB是否为0,是则填充组总和,否则填充0
内容的提问来源于stack exchange,提问作者AnnaHo
相关产品推荐
相关产品推荐

