Dplyr:计算汇总组之间的百分比变化 [英] dplyr: Calculate percent change between summarized groups

查看:0
本文介绍了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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆