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

R语言:按组计算指定Item金额总和并生成分类列SUM

用dplyr实现分组计算与颜色赋值需求

可以通过分组计算目标项总和、判断组内是否包含目标项,再结合条件逻辑生成颜色列,具体实现如下:

1. 准备环境与示例数据

先确保安装并加载dplyr包:

# 若未安装dplyr,先执行安装
# install.packages("dplyr")
library(dplyr)

# 构造测试用数据框
df <- tibble(
  GROUP = c("G1", "G1", "G1", "G2", "G2", "G3", "G3", "G4"),
  ITEM = c("A", "B", "AT", "EP", "C", "D", "E", "AC"),
  AMOUNT = c(50, 20, 40, 15, 30, 10, 20, 85)
)

2. 核心逻辑实现

通过分组计算+条件判断生成目标列:

result_df <- df %>%
  group_by(GROUP) %>%
  mutate(
    # 计算组内指定ITEM的AMOUNT总和
    sum_target = sum(AMOUNT[ITEM %in% c("A", "AT", "EP", "AC")], na.rm = TRUE),
    # 判断组内是否存在指定ITEM
    has_target = any(ITEM %in% c("A", "AT", "EP", "AC")),
    # 按规则生成颜色值
    COLOR = case_when(
      !has_target ~ "black",
      sum_target >= 80 ~ "red",
      sum_target <= 20 ~ "yellow",
      TRUE ~ "orange"
    )
  ) %>%
  # 移除中间计算列(按需保留)
  select(-sum_target, -has_target) %>%
  ungroup()

# 查看最终结果
print(result_df)

代码说明

  • group_by(GROUP):按GROUP分组,确保所有计算仅在组内生效
  • sum_target:仅统计组内属于指定ITEM的AMOUNT总和,na.rm=TRUE避免空值干扰
  • has_target:区分“组内无指定ITEM”和“有指定ITEM但总和为0”的场景
  • case_when():按优先级匹配规则,先处理无目标项的情况,再依次匹配总和区间
  • ungroup():取消分组,返回常规data.frame格式

示例输出

# A tibble: 8 × 4
  GROUP ITEM  AMOUNT COLOR 
  <chr> <chr>  <dbl> <chr> 
1 G1    A         50 orange
2 G1    B         20 orange
3 G1    AT        40 orange
4 G2    EP        15 yellow
5 G2    C         30 yellow
6 G3    D         10 black 
7 G3    E         20 black 
8 G4    AC        85 red   

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 08:43:25