首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用summarize()访问其他group_by组

使用summarize()访问其他group_by组
EN

Stack Overflow用户
提问于 2020-08-27 22:52:12
回答 1查看 56关注 0票数 3

我有一个数据框,里面有列基因,它们所属的染色体区域,测量基因表达的细胞系,以及基因在该细胞系中的表达水平--它看起来基本上是这样的:

代码语言:javascript
复制
gene    region    cell_line    expression
A       X         Joe          1
B       X         Joe          2 
C       Y         Joe          2
D       Z         Joe          3
E       Z         Joe          0
A       X         Claire       2
B       X         Claire       1
C       Y         Claire       3
D       Z         Claire       3
E       Z         Claire       1

我想要做的是,对于每个细胞系,计算所有不在给定区域的基因的染色体区域的平均值,标准差,等等。例如,对于Joe的区域X,我希望输出"summarize()“行显示不在Joe的X中的所有基因(即Joe的基因C、D、E)的表达式的平均值。

因此,输出如下所示:

代码语言:javascript
复制
region    cell_line     mean_other    standard_deviation_other   
X         Joe           1.67          some number
Y         Joe           1.5           some number
Z         Joe           1.67          some number
X         Claire        2.33          some number
Y         Claire        2.33          some number
Z         Claire        2             some number

我的想法是执行以下操作,除非我不知道如何让汇总在给定时间“操作”一个组之外的组。

代码语言:javascript
复制
df %>% group_by(region, cell_line) %>% 
 summarize(mean_other = mean(expression of cell lines not in this group),
           standard_deviation_other = var(expression of cell lines not in this group)
EN

回答 1

Stack Overflow用户

发布于 2020-08-27 23:25:42

我们可以使用新的dplyr::group_modify()轻松地跨组应用函数,它将每个组作为一个数据帧。然后,我们可以在原始数据框上使用dplyr::anti_join(),并在摘要中应用您想要的任何内容。

使用mtcars

代码语言:javascript
复制
library(dplyr)

mtcars %>%
  group_by(cyl) %>%
  group_modify(~anti_join(mtcars, .) %>%
                 summarize(disp_m = mean(disp),
                           disp_sd = sd(disp)))
#> # A tibble: 3 x 3
#> # Groups:   cyl [3]
#>     cyl disp_m disp_sd
#>   <dbl>  <dbl>   <dbl>
#> 1     4   297.   101. 
#> 2     6   244.   136. 
#> 3     8   136.    50.7

并使用cyl == 4检查第一组

代码语言:javascript
复制
mtcars %>%
  filter(cyl != 4) %>%
  summarize(disp_m = mean(disp),
            disp_sd = sd(disp))
#>     disp_m  disp_sd
#> 1 296.5048 101.1434

在你的df上,它应该是这样的:

代码语言:javascript
复制
df %>%
  group_by(region, cell_line) %>%
  group_modify(~anti_join(df, .) %>%
               summarize(mean_other = mean(expression),
                         sd_other = var(expression)))
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63618667

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档