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

基于分组条件修正R语言DataFrame中Cost值的问题求助

解决方法

你的原代码错误在于按group和month分组后,每个分组仅包含单一group的记录,无法在同组内获取对应月份的Bottle成本,且summarise会聚合数据,破坏原有的行结构。下面提供两种符合需求的dplyr解决方案:

方法一:按月份分组直接修改成本

通过month分组,在每个月份组内为Apple Juice的成本减去同组Bottle的成本,同时保留所有原行数据:

library(dplyr)

# 原始数据
df <- data.frame(group = c("Apple Juice", "Apple Juice", "Apple Juice", "Bottle", "Bottle", "Bottle"), 
                 month = c(1,2,3,1,2,3), 
                 cost = c(10,10,10,4,4,4))

# 修正后的代码
df <- df %>%
  group_by(month) %>%
  mutate(cost = ifelse(group == "Apple Juice", cost - cost[group == "Bottle"], cost)) %>%
  ungroup()

执行后结果:

# A tibble: 6 × 3
  group       month cost
  <chr>       <dbl> <dbl>
1 Apple Juice     1     6
2 Apple Juice     2     6
3 Apple Juice     3     6
4 Bottle          1     4
5 Bottle          2     4
6 Bottle          3     4

方法二:宽转长格式计算

先将数据转为宽格式(每个月份一行,包含Apple Juice和Bottle的成本),计算差值后再转回长格式:

library(dplyr)
library(tidyr)

df <- df %>%
  pivot_wider(names_from = group, values_from = cost) %>%
  mutate(`Apple Juice` = `Apple Juice` - Bottle) %>%
  pivot_longer(cols = c(`Apple Juice`, Bottle), names_to = "group", values_to = "cost") %>%
  arrange(group, month)

该方法逻辑更直观,适合复杂的多组成本计算场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 03:10:25