我有一个我想 retrofit 的相框.

Expression Dataframes and Module list

gene_express = data.frame(gene = c('gene1', 'gene2', 'gene3', 'gene4', 'gene5', 'gene6', 'gene7', 'gene8', 'gene9', 'gene10'), 
                      sample1 = sample(0:10,10), sample2 = sample(0:10,10), sample3 = sample(0:10,10), sample4 = sample(0:10,10), row.names =1) 
module1 = c('gene1', 'gene2', 'gene10', 'gene8')
module2 = c('gene2', 'gene9', 'gene6', 'gene5', 'gene10')
module3 = c('gene4', 'gene10', 'gene1', 'gene8')
module4 = c('gene5', 'gene8', 'gene2', 'gene7', 'gene6', 
'gene5', 'gene10')
Module_list = list(module1, module2, module3, module4)
names(Module_list) <- c('module1', 'module2', 'module3', 
'module4')

My code to generate the desire dataframe

MASM_mat  = data.frame()
for(module in names(Modules)){
   module_genes = modules[[module]]
   for(column in colnames(gene_express)){
     module_mean  = gene_express[rownames(gene_express) %in% 
     module_gene, ] %>% pull(column) %>% summary()
     module_mean = module_mean[[4]] #this the mean
     module_mean_table = data.frame(module, module_mean) %>% 
     `colnames<-` (c('Module', column))
     MASM_mat = merge(MASM_mat,MASM, all=T)
     }}

我从代码中得到的结果:

enter image description here

我想要的结果:

enter image description here

我想要的是每个样本中每个模块的平均值(即基因表达矩阵中其组成基因的平均值).

推荐答案

您可以使用

library(dplyr)
library(tidyr)

df |> 
  mutate(
    module1 = case_match(gene, c("gene1", "gene2", "gene8", "gene10") ~ TRUE, .default = FALSE),
    module2 = case_match(gene, c("gene2", "gene9", "gene6", "gene5", "gene10") ~ TRUE, .default = FALSE),
    module3 = case_match(gene, c("gene4", "gene10", "gene1", "gene8") ~ TRUE, .default = FALSE),
    module4 = case_match(gene, c("gene5", "gene2", "gene7", "gene8", "gene6", "gene10") ~ TRUE, .default = FALSE)
  ) |> 
  pivot_longer(cols = starts_with("module"),
               names_to = "Module",
               values_to = "blnModule") |> 
  pivot_longer(cols = starts_with("sample"),
               names_to = "numSample",
               values_to = "sample") |> 
  filter(blnModule == TRUE) |> 
  summarise(mean = mean(sample), .by = c(Module, numSample)) |> 
  pivot_wider(names_from = numSample,
              values_from = mean) |> 
  arrange(Module)

这将导致

# A tibble: 4 × 5
  Module  sample1 sample2 sample3 sample4
  <chr>     <dbl>   <dbl>   <dbl>   <dbl>
1 module1    1.68    2.9     3.58    4.25
2 module2    3.5     3.86    4.06    1.6 
3 module3    1.92    4.82    4.92    4.5 
4 module4    2.42    3.22    3.05    2.17

当使用样本数据时,

> df
     gene sample1 sample2 sample3 sample4
1   gene1     1.2     1.3     5.0       7
2   gene2     5.0     2.3     1.3       1
3   gene3     9.0     4.0     4.5       9
4   gene4     6.0    10.0     6.7       2
5   gene5     6.0     0.0     3.0       2
6   gene6     3.0     7.0     4.0       0
7   gene7     0.0     2.0     2.0       1
8   gene8     0.0     1.0     1.0       8
9   gene9     3.0     3.0     5.0       4
10 gene10     0.5     7.0     7.0       1

R相关问答推荐

在ComplexHeatmap中,如何更改anno_barplot()标题的Angular ?

如何替换R中数据集列中的各种字符串

从外部文件读取多个值作为字符向量

如何读取CSV的特定列时,给定标题作为向量

根据列A中的差异变异列,其中行由列B中的相对值标识

如何用书面利率绘制geom_bar图

从多个可选列中选取一个值到一个新列中

如何使这些react 表对象相互独立?

将项粘贴到向量中,并将它们分组为x的倍数,用空格分隔

将全局环境变量的名称分配给列表中的所有元素

当每个变量值只能 Select 一次时,如何从数据框中 Select 两个变量的组合?

在R中,如何从一系列具有索引名的变量快速创建数据帧?

计算来自单独分组的分幅的值的百分位数

如何将EC50值绘制在R中的剂量-react 曲线上?

Ggplot2:添加更多特定 colored颜色 的线条

带有Bootswatch Cerulean主题的shiny 仪表板中的浏览&按钮可见性问题

如何准确地指出Read_delim所面临的问题?

真实世界坐标的逆st_变换

以列名的字符向量作为参数按行应用自定义函数

用LOOCV进行K近邻问题