Dplyr:计算汇总组之间的百分比变化 [英] dplyr: Calculate percent change between summarized groups
本文介绍了Dplyr:计算汇总组之间的百分比变化的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试计算组之间的变化百分比,其中有一个对照和几个处理,在我的数据框中被组织为组。因为我有很多观察,所以我使用dplyr
。我不明白的是,如何有效地设定与哪一组进行比较?通常,我会将此任务分成多个步骤:
- 分组计算平均值
- 子集控制组以创建新的"控件"数据帧
- 将"控制"数据帧联接到第一个DF
- 计算对照和处理之间的变化百分比。
不过,我想知道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))
dd %>%
group_by(grp) %>%
summarise(my_mean = mean(val))
经过计算的‘对照’和单独治疗之间的百分比变化的预期结果:
# A tibble: 3 x 2
grp my_mean perc_change
<fct> <dbl>
1 ch1 2.30 XX
2 ch2 5.00 YY
3 control 1.39 0
推荐答案
您想要这个吗?
library(tidyverse)
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))
dd %>%
group_by(grp) %>%
summarise(my_mean = mean(val)) %>%
mutate(perc_change = scales::percent((my_mean - my_mean[grp == 'control'])/my_mean[grp == 'control']))
#> # A tibble: 3 x 3
#> grp my_mean perc_change
#> <chr> <dbl> <chr>
#> 1 ch1 3.00 63%
#> 2 ch2 4.07 121%
#> 3 control 1.84 0%
由reprex package(v2.0.0)在2021-07-31创建
这篇关于Dplyr:计算汇总组之间的百分比变化的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文