热门标签 | HotTags
当前位置:  开发笔记 > 程序员 > 正文

TCGA代码分析流程–1.2.整理表达矩阵和临床信息数据

1.整理表达矩阵下载的文件是按样本存放的,每个tsv文件中都记录着一个样本的基因表达量,需要将所有tsv文件合并,得到所有样本的基因表达量的表格。准备setwd(D:RCHOL)i

1. 整理表达矩阵

下载的文件是按样本存放的,每个tsv文件中都记录着一个样本的基因表达量,需要将所有tsv文件合并,得到所有样本的基因表达量的表格。


准备

setwd("D:/R/CHOL")
if(!require("rjson"))install.packages("rjson",update = F,ask = F)
library(rjson)
library(tidyverse)

1. 设置下载数据路径(需修改)

2. 判断式安装“rjson”包



获取每个样品id和相应tsv文件名的对应关系:

样品id和相应tsv文件的对应关系存放在metadata文件中。

json <- jsonlite::fromJSON("metadata.cart.2022-09-26.json")
View(json)
sample_id <- sapply(json$associated_entities,function(x){x[,1]})
file_sample <- data.frame(sample_id,file_name=json$file_name)

1. 读取Metadata文件中每个样品的信息(需修改matadata文件的名称)

3. 提取所有样品id,如:TCGA-W5-AA2X-01A-11R-A41I-07

4. 获取样品id和相应tsv文件名的对应关系:



合并所有样品id的基因表达量

 每个tsv文件中,gene_id的顺序是都一致的,可以直接cbind,不会导致顺序错乱。

count_file <- list.files("expdata",pattern = "*.tsv",recursive = TRUE)
count_file_name <- strsplit(count_file,split="/") %>%
sapply(function(x){x[2]})
matrix = data.frame(matrix(nrow = 60660,ncol = 0))
for (i in 1:length(count_file)){
data<- paste0("expdata/",count_file[i]) %>%
read.delim(fill = TRUE,header = FALSE,row.names = 1)
colnames(data) <- data[2,]
data <- data[-c(1:6),]
data <- data[3]
colnames(data) <- file_sample$sample_id[which(file_sample$file_name == count_file_name[i])]
matrix <- cbind(matrix,data)
}
write.csv(matrix,"COUNT_matrix.csv",row.names = TRUE)

1. 获取expdata文件夹下的所有tsv表达文件的“路径+文件名”

2-3. 在count_file中分割出文件名

4. 新建一个空白数据框,行数等于tsv文件中的基因数

5-13. 循环读取每一个tsv文件

  10. 取出unstranded列(第3列),即count数据,对应其它数据

14. 输出表达矩阵文件:(行名为样品id,列名为Ensembl ID,值为基因的表达量)



 设置Gene Symbol为表达矩阵的列名(上一步得到的列名是Ensembl ID)

因为“matrix”和“gene_name”均来源于tsv文件,所以可以直接cbind,不会导致顺序错乱。

data <- paste0("expdata/",count_file[1]) %>%
read.delim(fill = TRUE,header = FALSE,row.names = 1) %>%
as.matrix()
gene_name <-data[-c(1:6),1]
matrix0 <- cbind(gene_name,matrix)
matrix0 <- aggregate( . ~ gene_name,data=matrix0, max)
rownames(matrix0) <- matrix0[,1]
matrix0 <- matrix0[,-1]

1-3. 读取一个tsv文件(因为所有的tsv文件中“gene_name”的顺序都相同,读取一个即可)

4. 提取该tsv文件中的第一列“gene_name”

5. 将“gene_name”这一列插入到表达矩阵“matrix”中

6. 将“gene_name”列去除重复的基因,保留每个基因最大表达量结果。aggregate函数中,“. ~ gene_name”表示以gene_name为分类,计算其他列的最大值。

7. 将“gene_name”列设为行名

8. 去掉“gene_name”列



 过滤掉在很多样本中表达量都为0的基因

matrix0 = matrix0[apply(matrix0,1,function(x)sum(x > 1) >= 20), ]

1. 判断“matrix0”中的每个基因,是否在至少20个样本中>1。保留符合条件的基因,剔除不符合条件的基因。

样本数“>=20”根据总样本量修改,可以是数值,比如大于正常样本数“>=40”,也可以是百分比,如大于总样本数的75%“>=0.75*(ncol(matrix0))”



将样本分为normal组和tumor组

sample <- colnames(matrix0)
normal <- c()
tumor <- c()
for (i in 1:length(sample)){
if((substring(colnames(matrix0)[i],14,15) > 10)){
normal <- append(normal,sample[i])
} else {
tumor <- append(tumor,sample[i])
}
}
tumor_matrix <- matrix0[,tumor]
normal_matrix <- matrix0[,normal]
group_list = ifelse(as.numeric(str_sub(colnames(matrix0),14,15)) <10,'tumor','normal') %>%
factor(levels = c("normal","tumor"))
table(group_list)

1. 从表达矩阵中提取列名

2-3. 创建“normal”和“tumor”空白向量

4-10. 样本id中14、15位置大于10的为normal样本,否则为tumor样本

11-12. 将总的表达矩阵分为normal和tumor矩阵

13. 将正常样品和肿瘤样品分开,并设置因子,便于后续分析

14. 查看正常样品和肿瘤样品的数量





2. 整理临床信息

临床信息中没有分期grade,看后续分析怎么解决

 https://www.jingege.wang/2022/07/16/%e6%96%b0%e7%89%88tcga%e6%95%b0%e6%8d%ae%e4%b8%8b%e8%bd%bd%e5%8f%8ar%e8%af%ad%e8%a8%80%e6%95%b4%e5%90%88%e4%bb%a3%e7%a0%81/


先对单个文件进行检查:

library(XML)
result <- xmlParse("./clinical/0f133012-23ef-4237-acfd-47b132b99775/nationwidechildrens.org_clinical.TCGA-W5-AA2Q.xml")
rootnode <- xmlRoot(result)
rootsize <- xmlSize(rootnode)
print(rootnode[1])
print(rootnode[2])
xmldataframe <- xmlToDataFrame(rootnode[2])
head(t(xmlToDataFrame(rootnode[2])))

2. 读取单个xml文件,需修改文件目录和文件名

3. 将根节点从 xml 文件中移除。

4. 查找根中的节点数。

5. 查看第一个节点

6. 查看第二个节点,确认第二个节点为临床信息的保存位置

7. 将xml中第二个节点转换为数据框

8. 转置并查看该数据框



读取所有临床数据文件:

获得所有临床数据文件路径

xmls = dir("clinical/",pattern = "*.xml$",recursive = T)

读取目录为“clinical/”,读取模式为以“*.xml”结尾的文件,recursive表示列表是否应重新进入目录


构建读取函数:

td = function(x){
result <- xmlParse(file.path("clinical/",x))
rootnode <- xmlRoot(result)
xmldataframe <- xmlToDataFrame(rootnode[2])
return(t(xmldataframe))
}

读取并整合所有临床信息

cl = lapply(xmls,td)
cl_df <- t(do.call(cbind,cl))
cl_df[1:3,1:3]
clinical = data.frame(cl_df)
clinical[1:4,1:4]

1. 对于xmls中的每一个文件,执行td函数,输出每一个病人的临床信息,并整合到列表中

2. 合并列表中的每一个元素为数据框,并将数据框转置(转置的输出结果为矩阵)

4. 将转置的结果重新转变为数据框



 



推荐阅读
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • Navicat Premium 15 安装指南及数据库连接配置
    本文详细介绍 Navicat Premium 15 的安装步骤及其对多种数据库(如 MySQL 和 Oracle)的支持,帮助用户顺利完成软件的安装与激活。 ... [详细]
  • 本文将介绍如何使用 Go 语言编写和运行一个简单的“Hello, World!”程序。内容涵盖开发环境配置、代码结构解析及执行步骤。 ... [详细]
  • Linux 系统启动故障排除指南:MBR 和 GRUB 问题
    本文详细介绍了 Linux 系统启动过程中常见的 MBR 扇区和 GRUB 引导程序故障及其解决方案,涵盖从备份、模拟故障到恢复的具体步骤。 ... [详细]
  • 本文探讨了Hive中内部表和外部表的区别及其在HDFS上的路径映射,详细解释了两者的创建、加载及删除操作,并提供了查看表详细信息的方法。通过对比这两种表类型,帮助读者理解如何更好地管理和保护数据。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 深入理解Tornado模板系统
    本文详细介绍了Tornado框架中模板系统的使用方法。Tornado自带的轻量级、高效且灵活的模板语言位于tornado.template模块,支持嵌入Python代码片段,帮助开发者快速构建动态网页。 ... [详细]
  • PHP 5.2.5 安装与配置指南
    本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ... [详细]
  • 本文介绍了在使用Visual Studio 2015进行项目开发时,遇到类向导弹出“异常来自 HRESULT:0x8CE0000B”错误的解决方案。通过具体步骤和实践经验,帮助开发者快速排查并解决问题。 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • 数据管理权威指南:《DAMA-DMBOK2 数据管理知识体系》
    本书提供了全面的数据管理职能、术语和最佳实践方法的标准行业解释,构建了数据管理的总体框架,为数据管理的发展奠定了坚实的理论基础。适合各类数据管理专业人士和相关领域的从业人员。 ... [详细]
  • CentOS7源码编译安装MySQL5.6
    2019独角兽企业重金招聘Python工程师标准一、先在cmake官网下个最新的cmake源码包cmake官网:https:www.cmake.org如此时最新 ... [详细]
  • 如何查找和管理计算机中的C盘临时文件
    本文详细介绍了如何在计算机中找到和管理C盘的临时文件,包括其具体路径、环境变量设置方法以及清理这些文件对系统性能的影响。对于希望优化系统性能和释放磁盘空间的用户来说,这是一篇非常有价值的参考。 ... [详细]
author-avatar
你去过的地方叫远方
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有