在R语言中将基因集字符向量列表转换为二进制矩阵
解决方法
基础R实现(无需额外包)
先提取所有唯一基因,再逐个通路判断基因是否存在,生成二进制矩阵:
# 定义输入的通路-基因列表 gene_sets = list( pathwayX = c("Gene3"), pathwayY = c("Gene2", "Gene3"), pathwayZ = c("Gene1", "Gene2", "Gene3") ) # 获取所有唯一基因并按字母排序 all_genes <- sort(unique(unlist(gene_sets))) # 生成二进制矩阵 binary_matrix <- do.call(rbind, lapply(gene_sets, function(pathway_genes) { as.integer(all_genes %in% pathway_genes) })) # 设置列名 colnames(binary_matrix) <- all_genes # 查看结果 binary_matrix
运行后输出结果:
Gene1 Gene2 Gene3 pathwayX 0 0 1 pathwayY 0 1 1 pathwayZ 1 1 1
tidyverse 实现(语法更直观)
如果熟悉tidyverse工具链,可以用数据框转换的方式实现:
library(tidyverse) # 转换为二进制矩阵 binary_matrix <- enframe(gene_sets, name = "pathway", value = "gene") %>% unnest(gene) %>% mutate(present = 1) %>% pivot_wider(names_from = gene, values_from = present, values_fill = 0) %>% column_to_rownames("pathway") %>% as.matrix() # 查看结果 binary_matrix
该方法通过将列表转为长格式数据框,再转换为宽格式并填充缺失值为0,最终得到目标矩阵。
内容的提问来源于stack exchange,提问作者plicht
相关产品推荐
相关产品推荐

