您好,登錄后才能下訂單哦!
今天小編給大家分享一下R語言怎么批量讀取某路徑下文件內(nèi)容的相關(guān)知識點,內(nèi)容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。
R剛?cè)腴T的時候,能夠正確讀取單個文件就覺得小有成就,隨著時間的積累,單一文件地讀取已經(jīng)不能滿足需求了,此時,批量地做就是解放雙手地過程。
使用for循環(huán)把下載地TCGA數(shù)據(jù)讀入R語言并轉(zhuǎn)換成數(shù)據(jù)框
使用三個for循環(huán)來完成,這是第一個for循環(huán)。
1. 把所有數(shù)據(jù)讀入在一個文件夾中
dir.create("data_in_one") #創(chuàng)建目標文件夾,也可右鍵創(chuàng)建 dir("rawdata/") #查看原路徑的內(nèi)容 for (dirname in dir("rawdata/")){ ## 1.要查看的單個文件夾的絕對路徑 mydir <- paste0(getwd(),"/rawdata/",dirname) ## 2.找到對應(yīng)文件夾中的文件并提取名稱,pattern表示模式,可以是正則表達式 file <- list.files(mydir,pattern = "*.counts") ## 3.當(dāng)前文件的絕對路徑是 myfile <- paste0(mydir,"/",file) ## 4.復(fù)制這個文件到目的文件夾 file.copy(myfile,"data_in_one") }
2. 尋找TCGA ID并讓文件名稱和TCGA ID保持一致。
第二個for循環(huán)。文件名稱和TCGA ID的對應(yīng)關(guān)系,藏在了metadata中。
metadata <- jsonlite::fromJSON("data/metadata.cart.2021-05-28.json") metadata_id <- metadata[,c("file_name","associated_entities")] ## 1.準備容器,已經(jīng)存在,我們把新數(shù)據(jù)添加在第三列 metadata_id ## 2.循環(huán)操作 for (i in 1:nrow(metadata_id)){ print(i) metadata_id[i,3] <- metadata_id$associated_entities[i][[1]]$entity_submitter_id } ## 重新命名 colnames(metadata_id)[3] <- "TCGA_id"
行排序,為了把文件名稱和TCGA_id對應(yīng)起來。讀入的順序和復(fù)制到新路徑的順序不一致,這一步的目的是讓其保持一致。
rownames(metadata_id) <- metadata_id[,1] metadata_id <- metadata_id[files,]
3. 輸入文件名并提取文件的第二列(counts列)
#install.packages("data.table") #構(gòu)建函數(shù) myfread <- function(files){ data.table::fread(paste0("data_in_one/",files))$V2 } ## 測試文件 test <- myfread(files[1])
4.1 使用for循環(huán)來批量讀入并整合到一個數(shù)據(jù)框。
## 1.創(chuàng)建容器 gene_id <- data.table::fread(paste0("data_in_one/",files[1]))$V1 expr_df <- data.frame(gene_id=gene_id) ## 2.按照列讀入 for (i in 1:length(files)){ print(i) expr_df[,i+1] = myfread(files[i]) } ## 增加列名 colnames(expr_df) <- c("gene_id",metadata_id$TCGA_id) ### 意外發(fā)現(xiàn) tail(expr_df$gene_id,10) ### 去掉最后5行 (nrow(expr_df)-5) expr_df <- expr_df[1:(nrow(expr_df)-5),] save(expr_df,file = "output/BRCA_RNASEQ_exprdf.Rdata")
4.2 使用lapply + function 模式
1.函數(shù)
myfread <- function(files){ data.table::fread(paste0("data_in_one/",files))$V2 } ### 2.lapply dd = lapply(files,myfread) ### 3.do.call expr_df = as.data.frame(do.call(cbind,dd)) ### 4.添加名稱 colnames(expr_df) = metadata_id$TCGA_id rownames(expr_df) = data.table::fread(paste0("data_in_one/",files[1]))$V1
以上就是“R語言怎么批量讀取某路徑下文件內(nèi)容”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學(xué)習(xí)更多的知識,請關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。