如何在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
相关产品推荐
相关产品推荐

