網站首頁 編程語言 正文
R剛入門的時候,能夠正確讀取單個文件就覺得小有成就,隨著時間的積累,單一文件地讀取已經不能滿足需求了,此時,批量地做就是解放雙手地過程。
使用for循環把下載地TCGA數據讀入R語言并轉換成數據框
使用三個for循環來完成,這是第一個for循環。
1. 把所有數據讀入在一個文件夾中
dir.create("data_in_one") #創建目標文件夾,也可右鍵創建 dir("rawdata/") #查看原路徑的內容 for (dirname in dir("rawdata/")){ ? ? ## 1.要查看的單個文件夾的絕對路徑 ? mydir <- paste0(getwd(),"/rawdata/",dirname) ? ## 2.找到對應文件夾中的文件并提取名稱,pattern表示模式,可以是正則表達式 ? file <- list.files(mydir,pattern = "*.counts") ? ## 3.當前文件的絕對路徑是 ? myfile <- paste0(mydir,"/",file) ? ## 4.復制這個文件到目的文件夾 ? file.copy(myfile,"data_in_one") ? }
2. 尋找TCGA ID并讓文件名稱和TCGA ID保持一致。
第二個for循環。文件名稱和TCGA ID的對應關系,藏在了metadata中。
metadata <- jsonlite::fromJSON("data/metadata.cart.2021-05-28.json") metadata_id <- metadata[,c("file_name","associated_entities")] ## 1.準備容器,已經存在,我們把新數據添加在第三列 metadata_id ## 2.循環操作 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對應起來。讀入的順序和復制到新路徑的順序不一致,這一步的目的是讓其保持一致。
rownames(metadata_id) <- metadata_id[,1] metadata_id <- metadata_id[files,]
3. 輸入文件名并提取文件的第二列(counts列)
#install.packages("data.table") #構建函數 myfread <- function(files){ data.table::fread(paste0("data_in_one/",files))$V2 } ## 測試文件 test <- myfread(files[1])
4.1 使用for循環來批量讀入并整合到一個數據框。
## 1.創建容器 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) ### 意外發現 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.函數
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
原文鏈接:https://www.jianshu.com/p/0802c0b1ebc2
相關推薦
- 2022-10-06 C++?abs函數實際應用詳解_C 語言
- 2022-12-10 C++中如何將數據保存為CSV文件_C 語言
- 2022-07-07 python如何實現數組元素兩兩相加_python
- 2022-04-09 windows中查看進程(netstat)和殺掉進程(taskkill)的幾個命令
- 2021-11-02 利用shadowsocks搭建局域網透明網關_Linux
- 2023-02-25 Golang內存泄漏場景以及解決方案詳析_Golang
- 2022-06-12 Centos系統搭建MongoDB數據庫_MongoDB
- 2023-04-06 TypeScript?基礎數據結構哈希表?HashTable教程_其它
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支