使用dplyr计算分组汇总后各处理组相对对照组的百分比变化
dplyr单链实现对照组百分比变化计算
可以直接在dplyr的链式操作中一步完成计算,不需要拆分多步生成独立对照组表、再做关联,核心是通过逻辑索引直接提取汇总后的对照组均值做全表计算。
- 核心逻辑:分组汇总得到各组均值后,用
grp == "control"匹配到对照组的均值,统一计算所有组相对于该值的百分比变化,对照组计算结果自动为0,不需要额外赋值。 - 实现代码:
library(dplyr) # 模拟数据 set.seed(5) dd <- data.frame(id = rep(c(1:4), 3), val = c(rnorm(4) +2, rnorm(4) +3, rnorm(4) +4), grp = rep(c("control", "ch1", "ch2"), each = 4)) # 一步计算结果 result <- dd %>% group_by(grp) %>% summarise(my_mean = mean(val)) %>% mutate(perc_change = (my_mean - my_mean[grp == "control"])/my_mean[grp == "control"] * 100)
- 输出结果:
# A tibble: 3 × 3 grp my_mean perc_change <chr> <dbl> <dbl> 1 ch1 3.14 48.3 2 ch2 4.47 111. 3 control 2.12 0
如果需要调整百分比的保留小数位数,可在mutate中配合round()函数使用,比如perc_change = round((my_mean - my_mean[grp == "control"])/my_mean[grp == "control"] * 100, 2)即可保留两位小数。
内容的提问来源于stack exchange,提问作者maycca
相关产品推荐
相关产品推荐

