TCGA 命名详解

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.youkuaiyun.com/qq_35203425/article/details/80851862
在TCGA中,一个患者可能会对应多个样本,如TCGA-A6-6650可以得到3个样本数据:

TCGA-A6-6650-01A-11R-1774-07
TCGA-A6-6650-01A-11R-A278-07
TCGA-A6-6650-01B-02R-A277-07
大家知道一般在做TCGA数据分析的时候样本名实际上只保留到前四个元素(以”-“分割),例如TCGA-A6-6650-01。所以实际上上示3个样本一般只保留一个,那该怎么取舍呢?

在取舍之前,当然要先搞清楚样本命名方式:

我们将此示图以”-“分割,具体拆开解读一下:

TCGA:Project, 所有TCGA样本名均以这个开头,标志
A6:Tissue source site,组织来源编码,如A6就表示来源于Christiana Healthcare中心的结肠癌组织。更多编码所代表的意义详见: 
https://gdc.cancer.gov/resources-tcga-users/tcga-code-tables/tissue-source-site-codes
6650:Participant, 参与者编号
01:Sample, 这两个数字可以说是最关键、最被大家注意的,其中编号01~09表示肿瘤,10~19表示正常对照,如下: 
https://gdc.cancer.gov/resources-tcga-users/tcga-code-tables/sample-type-codes 
所以在TCGA样本名中,这个位置最常见的就是01和11,当然偶尔也会有其他的数字
A:Vial, 在一系列患者组织中的顺序,绝大多数样本该位置编码都是A; 很少数的是B,表示福尔马林固定石蜡包埋组织,已被证明用于测序分析的效果不佳,所以不建议使用-01B的样本数据:
所以命名至此,已经可以开始用于区别不同的样本了,以下将是更细节的描述:

11:Portion, 同属于一个患者组织的不同部分的顺序编号,同一组织会分割为100-120mg的部分,分别使用
R:Analyte, 分析的分子类型,对应关系如下所示: 
https://gdc.cancer.gov/resources-tcga-users/tcga-code-tables/portion-analyte-codes
1774:Plate, 在一系列96孔板中的顺序,值大表示制板越晚
07:Center, 测序或鉴定中心编码,更多编码详见: 
https://tcga-data.nci.nih.gov/datareports/codeTablesReport.htm?codeTable=center
一个借鉴的图片: 
 
更多内容详见: 
https://wiki.nci.nih.gov/display/TCGA/TCGA+barcode 
http://docs.cavatica.org/docs/tcga-grch38-metadata

所以现在看这三个样本:

TCGA-A6-6650-01A-11R-1774-07
TCGA-A6-6650-01A-11R-A278-07
TCGA-A6-6650-01B-02R-A277-07
其区别就在于,前两个使用的是患者的冰冻组织做的测序,而第三个用的是福尔马林固定石蜡包埋组织;而前两个样本的区别在于同一组织后续使用了不同的96孔板。

理解了命名规则及三者命名上的主要区别后,现在可以重点解决如何从一个患者的多个样本中挑选样本的问题了,首先排除TCGA-A6-6650-01B-02R-A277-07,因为是-01B,福尔马林固定石蜡包埋组织!剩下的两个:

TCGA-A6-6650-01A-11R-1774-07
TCGA-A6-6650-01A-11R-A278-07
先看看GDAC firehose遇到这种情况怎么解决,总结起来就是:

1、对RNA数据来说,Analyte为R的优先级最该,其次是R和T,而对于DNA层面的分析来说,D的优先级最高。 
2、如果Analyte相同,那就选择Portion和/或Plate值更大的。 
所以按照GDAC firehose的方法,最终保留TCGA-A6-6650-01A-11R-A278-07,因为其相对于TCGA-A6-6650-01A-11R-1774-07的板号(Plate)更晚: 
https://github.com/BioinformaticsFMRP/TCGAbiolinks/issues/163 
虽然看起来可能这么选比较准确,但是稍微有些麻烦~

然后是cBioPortal中的处理方式:

随机选择了一个,理由很简单啊,来源于同一个患者的癌组织样本差别不大,小编随机测试了两个样本,表达相关性值是大于0.8的。

所以如果遇到需要选择的时候,就仁者见仁了,建议天秤座的小伙伴们也不要太纠结到底哪个最好,当然如果你有不同的意见和看法,欢迎交流讨论!


 

<think>我们面对的问题是将一个列表(list)形式的数据转换为基因数×样本数的矩阵。在基因分析中,常见的情况是:列表中的每个元素代表一个样本,而每个样本包含多个基因的表达量(或其它数值)。目标是将这种结构转换为矩阵,其中行对应基因,列对应样本。 ### 步骤说明: 1. **理解数据结构**:假设我们有一个列表`data_list`,其长度为样本数。每个元素(代表一个样本)是一个数值向量,长度为基因数。注意:这里假设所有样本的基因顺序一致且数量相同(即每个向量的长度相同)。 2. **转换为矩阵**:在R中,我们可以使用`do.call`和`cbind`(或`rbind`)来将列表转换为矩阵。由于我们想要矩阵的每一列代表一个样本,每一行代表一个基因,因此应该使用`cbind`将每个样本的向量作为列组合起来。 3. **转置**:如果原始列表中的每个向量是基因表达量的一列(即每个向量是基因数×1),那么用`cbind`组合后,矩阵的维度就是[基因数×样本数]。但如果每个向量是行向量形式(即1×基因数),那么组合后需要转置。 ### 具体代码实现: 假设我们有一个列表`expression_list`,其中每个元素是一个数值向量(每个向量的长度相同,等于基因数),代表一个样本的基因表达量。 ```r # 示例数据:3个样本,每个样本有4个基因的表达量 expression_list <- list( sample1 = c(1.2, 3.4, 5.6, 7.8), sample2 = c(2.3, 4.5, 6.7, 8.9), sample3 = c(0.1, 0.2, 0.3, 0.4) ) # 将列表转换为矩阵:按列合并(每个样本为一列) expression_matrix <- do.call(cbind, expression_list) # 查看矩阵 print(expression_matrix) # 输出: # sample1 sample2 sample3 # [1,] 1.2 2.3 0.1 # [2,] 3.4 4.5 0.2 # [3,] 5.6 6.7 0.3 # [4,] 7.8 8.9 0.4 # 此时矩阵的行是基因(4行),列是样本(3列) ``` ### 注意事项: - **行名和列名**:上述代码中,列表的名称(如sample1, sample2, sample3)会自动成为矩阵的列名。如果需要设置行名(即基因名),可以在转换后添加: ```r rownames(expression_matrix) <- c("gene1", "gene2", "gene3", "gene4") ``` - **列表元素长度不一致**:如果列表中不同样本的基因数量不一致,上述方法会出错。需要先确保所有样本的基因数量相同(即每个向量的长度相同)。如果存在缺失,可能需要填充NA或进行其他处理。 ### 另一种方法:使用`sapply` 也可以使用`sapply`函数,它返回的矩阵默认将列表的每个元素作为一列: ```r expression_matrix <- sapply(expression_list, identity) ``` ### 特殊情况:每个样本的数据是行向量(即1×基因数) 如果每个样本的数据是以行向量存储(即每个元素是一个行向量),那么组合后矩阵的维度是[样本数×基因数],此时需要转置: ```r expression_matrix <- t(do.call(rbind, expression_list)) ``` ### 总结: - 使用`do.call(cbind, list)`将列表中的每个向量作为矩阵的列,形成基因数×样本数矩阵。 - 确保所有向量的长度相同(即基因数相同)。 - 设置行名(基因名)和列名(样本名)以方便后续分析。 在基因表达分析中,这种转换是常见的预处理步骤,便于后续进行差异表达分析、聚类分析等[^1]。 §§相关问题§§ 1. 在R中如何将矩阵的行和列进行转置? 2. 如何处理基因表达数据中样本的基因数量不一致的问题? 3. 基因表达矩阵标准化有哪些常用方法? 4. 如何为基因表达矩阵添加基因名和样本名?</think>### 基因分析中数据维度转换:从列表到[基因数×样本数]矩阵 在基因分析中,将列表数据转换为[基因数×样本数]矩阵是常见的数据预处理步骤。以下是完整解决方案: #### 核心转换方法 ```r # 假设 gene_list 是输入列表,每个元素代表一个样本的基因数据 # 每个样本数据是命名向量(基因名→表达量)或数据框 # 方法1:使用 do.call + cbind(适用于向量列表) gene_matrix <- do.call(cbind, gene_list) rownames(gene_matrix) <- names(gene_list[[1]]) # 设置基因名为行名 # 方法2:使用 purrr::reduce(更安全) library(purrr) gene_matrix <- reduce(gene_list, cbind) # 方法3:转换为tibble再转置(适用于复杂结构) library(tidyverse) gene_matrix <- gene_list %>% map(as_tibble, rownames = "gene") %>% reduce(full_join, by = "gene") %>% column_to_rownames("gene") %>% as.matrix() ``` #### 关键步骤详解 1. **数据标准化**: ```r # 确保所有样本有相同的基因顺序 common_genes <- Reduce(intersect, lapply(gene_list, names)) gene_list <- lapply(gene_list, function(x) x[common_genes]) ``` 2. **处理缺失值**: ```r # 用0或中位数填充缺失 gene_matrix[is.na(gene_matrix)] <- 0 # 或 gene_matrix <- apply(gene_matrix, 1, function(x) ifelse(is.na(x), median(x, na.rm=TRUE), x)) %>% t() ``` 3. **设置维度名称**: ```r rownames(gene_matrix) <- common_genes # 行=基因 colnames(gene_matrix) <- names(gene_list) # 列=样本 ``` #### 实际应用场景 1. **TCGA基因表达分析**: ```r # 从TCGA数据列表创建表达矩阵 tcga_matrix <- do.call(cbind, tcga_data_list) ``` 2. **拷贝数变异(CNV)分析**: ```r # 转换CNV数据为矩阵格式 cnv_matrix <- sapply(cnv_list, function(x) x$segment_mean) ``` 3. **突变数据分析**: ```r # 创建二元突变矩阵(1=突变, 0=未突变) mutation_matrix <- sapply(mutation_list, function(sample) as.integer(common_genes %in% sample$mutated_genes)) ``` #### 注意事项 1. **内存优化**: ```r # 对于大型数据集使用稀疏矩阵 library(Matrix) sparse_gene_matrix <- sparseMatrix( i = rep(seq_len(length(common_genes)), times = length(gene_list)), j = rep(seq_len(length(gene_list)), each = length(common_genes)), x = unlist(gene_list) ) ``` 2. **数据类型验证**: ```r # 检查所有样本的基因数量 gene_counts <- sapply(gene_list, length) if(length(unique(gene_counts)) > 1) warning("样本包含不同数量的基因!") ``` 3. **输出格式优化**: ```r # 转换为DESeq2等分析工具需要的格式 library(DESeq2) dds <- DESeqDataSetFromMatrix( countData = round(gene_matrix), # 表达矩阵需为整数 colData = sample_metadata, # 样本元数据 design = ~ condition ) ``` 这种转换是基因组分析(如差异表达分析、聚类分析)的关键预处理步骤,使数据适用于各种生物信息学算法和可视化方法[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值