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

如何在tibble中使用group_by将指定组值从所有组中减去

在tibble中基于分类"A"的数值计算差值

问题说明

需要将每个分类的values减去分类"A"对应位置的values,得到示例中的预期结果。

方法1:直接提取基准向量计算

无需使用group_by,先提取分类"A"的数值作为基准,再对所有数值做减法:

library(tidyverse)

# 构造原数据
d <- tibble(categories = c(rep("A", 3), rep("B", 3), rep("C", 3)), 
            values = 1:9)

# 提取分类"A"的数值向量
a_values <- d$values[d$categories == "A"]

# 计算差值
d <- d %>% mutate(values = values - rep(a_values, 3))

方法2:使用group_by按行匹配计算

如果一定要用group_by,可以基于行号分组,匹配分类"A"对应位置的数值做减法:

d <- d %>%
  # 按行号分组,确保每个位置对应分类"A"的同位置数值
  group_by(row_id = row_number()) %>%
  mutate(values = values - values[categories == "A"]) %>%
  ungroup() %>%
  # 移除临时行号列
  select(-row_id)

验证结果

执行后得到的结果与预期一致:

# # A tibble: 9 × 2
#   categories values
#   <chr>       <int>
# 1 A               0
# 2 A               0
# 3 A               0
# 4 B               3
# 5 B               3
# 6 B               3
# 7 C               6
# 8 C               6
# 9 C               6

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 00:05:47