我有一个数据框,里面有列基因,它们所属的染色体区域,测量基因表达的细胞系,以及基因在该细胞系中的表达水平--它看起来基本上是这样的:
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)的表达式的平均值。
因此,输出如下所示:
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我的想法是执行以下操作,除非我不知道如何让汇总在给定时间“操作”一个组之外的组。
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)发布于 2020-08-27 23:25:42
我们可以使用新的dplyr::group_modify()轻松地跨组应用函数,它将每个组作为一个数据帧。然后,我们可以在原始数据框上使用dplyr::anti_join(),并在摘要中应用您想要的任何内容。
使用mtcars
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检查第一组
mtcars %>%
filter(cyl != 4) %>%
summarize(disp_m = mean(disp),
disp_sd = sd(disp))
#> disp_m disp_sd
#> 1 296.5048 101.1434在你的df上,它应该是这样的:
df %>%
group_by(region, cell_line) %>%
group_modify(~anti_join(df, .) %>%
summarize(mean_other = mean(expression),
sd_other = var(expression)))https://stackoverflow.com/questions/63618667
复制相似问题