如何基于键值数据框提取同一复合物内基因的相关性?
问题描述
现有两个数据需要处理:
- 基因-基因相关矩阵:尺寸为1484×1484,矩阵中每个单元格对应I、J基因间的相关系数;
- 键值型数据框:包含复合物名称与Protein_ID的对应关系,示例如下:
Complex Protein_ID 1 BCL6-HDAC4 complex Bcl6 125 BCL6-HDAC5 complex Hdac5 249 BCL6-HDAC7 complex Bcl6 373 Multisubunit ACTR coactivator complex Ep300 497 Condensin I complex Smc2 621 BLOC-3 Hps4
需要提取同一复合物所属基因间的相关性值,生成以复合物名称、相关性值为列的新数据框,目标格式示例如下:
# this is a simulated data.frame Complex Correlation values BCL6-HDAC4 complex 0.64 BCL6-HDAC4 complex -0.25 Multisubunit ACTR coactivator complex 0.31 Multisubunit ACTR coactivator complex 0.30
实现方法(基于R语言)
以下是具体的代码实现步骤:
# 加载必要的包 library(dplyr) library(tidyr) # 假设相关矩阵名为cor_matrix,键值数据框名为complex_proteins # 步骤1:按复合物分组,获取每个复合物的蛋白质列表,过滤仅含单个蛋白的复合物 complex_groups <- complex_proteins %>% group_by(Complex) %>% summarise(proteins = list(Protein_ID)) %>% filter(lengths(proteins) >= 2) # 步骤2:生成蛋白两两组合,提取对应相关系数并整理格式 result <- complex_groups %>% mutate(pairs = map(proteins, ~ combn(.x, 2, simplify = FALSE))) %>% unnest(pairs) %>% mutate(cor_value = map_dbl(pairs, ~ cor_matrix[.x[1], .x[2]])) %>% select(Complex, `Correlation values` = cor_value) # 查看结果 head(result)
代码说明:
group_by + summarise(list(...)):将同一复合物的Protein_ID聚合成列表filter(lengths(proteins)>=2):排除无法生成配对的单蛋白复合物combn(..., 2):生成蛋白列表的所有两两非重复组合map_dbl:从相关矩阵中提取每对蛋白的相关系数select:重命名列并保留所需字段
注:确保相关矩阵的行名、列名与Protein_ID的取值完全匹配,矩阵格式或data.frame格式均可直接使用。
内容的提问来源于stack exchange,提问作者Mauricio Oliveira
相关产品推荐
相关产品推荐

