TCGA数据整理

rm(list = ls())
#metadata文件为了转换样本名称
#gdc_download文件可以得到表达谱以及和metadata文件样本名称取交集
#读取metadata文件
library(rjson)
json <- jsonlite::fromJSON("metadata.cart.2023-02-19.json")
#取json文件的file_name和json[[3]][[1]]的第一列
#自定义一个函数a
a <- function(x){
  x[,1]
}
sample_id <- sapply(json$associated_entities,a)
file_sample <- data.frame(sample_id,file_name=json$file_name)
#结束对metadata文件的处理


#对gdc_download文件初步处理
count_file <- list.files(path = "gdc_download_20230219_014900.173648",pattern = "*.tsv$"
                         ,recursive = T)
count_file_name <- strsplit(count_file,split = "/")
b <- function(y){
  y[2]
}
count_file_name <- sapply(count_file_name,b)
#结束对gdc_download的初步处理


#建立数据框其nrow不能随意设置
matrix <- data.frame(matrix(nrow = 60660,ncol = 0))
#data1有60660行,再看下一个,也为60660行,因此我们要根据行来合并matrix和data的话,matrix必需设置成为60660行
path <- paste0("gdc_download_20230219_014900.173648//",count_file[2])
data <- read.delim(path,row.names = 1,header = F)
colnames(data) <- data[2,]
data <- data[-(1:6),]
data <- data[6]
colnames(data) <- file_sample$sample_id[which(file_sample$file_name==count_file_name[2])]
matrix <- cbind(matrix,data)


#最后建立一个循环即可
for (i in 1:151) {
  path <- paste0("gdc_download_20230219_014900.173648//",count_file[i])
  data <- read.delim(path,header=F,row.names = 1)
  colnames(data) <- data[2,]
  data <- data[-(1:6),]
  data <- data[6]
  colnames(data) <- file_sample$sample_id[which(file_sample$file_name==count_file_name[i])]
  matrix <- cbind(data,matrix)
}
save(matrix,file="TCGA-LAML.rdata")



问题1:为什么在建立matrix时nrow=60660,而不是60666或者其他。

因为读取的data数据处理之后统一形式为有60660行(去除了1:6,因为不需要这6行),并且nrow必须和data的行数相同,因为cbind函数要求如此。

问题2:count_file和count_file_name以及file_sample作用分别是什么?

count_file:作用1是指定下载的gdc_download文件夹名称相对应,从而为path指定路径;作用2是为了能够得到对应的count_file_name,从而和file_sample样本名称相对应。

count_file_name:作用如上。

file_sample:对应count_file_name和样本名称

问题3:path <- paste0("gdc_download_20230219_014900.173648//",count_file[i])为什么要加上两个"//"一级count_file[i]又是什么意思?

一个/对应一级文件,我们要的数据是对应的二级文件,所以要加上两个//,count_file[i]是为了指定目录,建立循环。

如有其他问题欢迎在评论区留言。

salute!

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值