前期文章:
1. 在TCGA中找到并下载意向数据
2. TCGA: 如果不了解数据,何以读取数据?
前言
说起来前面真的有点犯傻,在读取metaData和clinical之后,个人非常想要快点把表达量数据也读取出来,于是在这两个data里面找了半天也没找到表达量counts,然后就放。。。放弃了。今天重新打开之后注意到一个叫做raw data
的文件夹,等下?这不就是我之前下载的1222个数据吗!前面还信誓旦旦的写了2. TCGA: 如果不了解数据,何以读取数据?,现在就是活生生的例子,我果然不懂数据,于是读了个寂寞。
1. 数据到底在哪儿
数据存在raw data文件夹下,可以看到每个样本都有独立的文件夹,而文件夹内只有一个.gz
文件。
2. 数据长什么样
那么我们该检查一下.gz文件内的data长什么样,在windows中我们无法使用已有的软件打开.gz
文件,于是我们在该文件下右键调用Git Bash Here
调用Git Bash Here
之后,使用代码打开文件泳衣查阅,这里我的代码是
zcat e30e547e-eeff-4a1f-829b-b6ec9e79f02a.htseq.counts.gz | less
## 使用less发现内容太多,所以更改为head和tail检查数据表头和结尾。
zcat e30e547e-eeff-4a1f-829b-b6ec9e79f02a.htseq.counts.gz | head
zcat e30e547e-eeff-4a1f-829b-b6ec9e79f02a.htseq.counts.gz | tail
数据查阅结果如下,我们发现数据没有表头,第一列是ensemble ID,且已经按照ensemble ID依次递增排序的,对应的第二列则为表达量counts,表格结束后有几句描述的话语,这应该不是我们想要读到数据框内的内容。
3. 收集文件名用以作为数据框的表头
检查目前我们拥有的所有文件,使用代码dir()
列出当前文件夹下所有文件的名字。结合我们前面了解到的情况,每个样本有单独的文件夹,因此我们通过代码dir()
只能看到文件夹的名字,而真正文件的名字还是没法看到,为此我们最好把所有的.gz文件移动到同一个文件夹下面,这里我是在Git Bash Here中使用代码cp */*.gz ./
在各种翻阅数据后得知,文件名是file_name (例如:00a47e69-ef6a-4be9-827d-d48609859a7e.htseq.counts.gz),而TCGA样本名叫做associated_entities(例如:aliquot, TCGA-AR-A1AS-01A-11R-A12P-07, e7b64cc3-9b2b-4938-9896-84b640d1586f, 7d681cc6-689d-41c8-9e84-e13733089ec9)。因此我们需要整理出一个file_name和TCGA样本名的表格。
metadata<- fromJSON( file = "metadata.cart.2020-10-08.json",
method = "C",
unexpected.escape = "error",
simplify = TRUE )
# 使用dplyr的select()函数
# select() picks variables based on their names.
library(dplyr)
metadata_id <- metadata %>%
dplyr::select(c(file_name,associated_entities))
# 使用了管道符%>%
所以我们检查metadata_id中哪一部分可以提取出TCGA ID
class(metadata_id[,2])
class(metadata_id[,2][1])
## 检查第二列数据类型,发现为list中还包含着list
metadata_id[,2][[1]]$entity_submitter_id
## 通过各种检查后发现entity_submitter_id是我们所要查找的TCGA ID
id_df <- data.frame() # 创建一个空的数据框
# 使用for循环,将metadata_id中第一列作为数据框id_df的第一列;# metadata_id第二列的entity_submitter_id作为数据框id_df的第二列。
4. 读取数据
自己写代码很复杂,推荐使用TCGAbiolinks完成。困了,下次接着写。