我有一个表达数据的数据框,其中基因是行,列是样本。我还有一个数据框,其中包含表达式数据框中每个样本的元数据。实际上,我的 expr 数据框有 30,000 多行和 100 多列。然而,下面是一个数据较小的示例。
expr <- data.frame(sample1 = c(1,2,2,0,0),
sample2 = c(5,2,4,4,0),
sample3 = c(1,2,1,0,1),
sample4 = c(6,5,6,6,7),
sample5 = c(0,0,0,1,1))
rownames(expr) <- paste0("gene",1:5)
meta <- data.frame(sample = paste0("sample",1:5),
treatment = c("control","control",
"treatment1",
"treatment2", "treatment2"))
我想找到每次治疗中每个基因的平均值。从我看到的 split() 或 group_by() 示例中,人们根据 data.frame 中已存在的列进行分组。但是,我有一个单独的数据框(元),用于对另一个数据框(expr)中的列进行分组。
我希望我的输出是一个数据框,其中基因作为行,治疗作为列,值作为平均值。
# control treatment1 treatment2
# gene1 mean mean mean
# gene2 mean mean mean
基础 R 中的一种方法适用于给定的特定玩具数据示例:
数据
像这样的东西。目前尚不完全清楚您想要在最后一步中按什么进行分组,但您可以轻松调整。
基本 R 方法:
这是
data.table
@Gregor Thomas 提供的具有相同逻辑的方法:这是 中的另一种方法
tidyverse
,通过meta
创建命名向量而不是left_join()
,用处理来替换样本编号,并使用values_fn
insidepivot_wider()
代替summarise()
:创建于 2023 年 12 月 21 日,使用reprex v2.0.2