白色玫瑰 發表於 2022-4-1 15:41:53

R语言批量读取某路径下文件内容的方法

<p>R刚入门的时候,能够正确读取单个文件就觉得小有成就,随着时间的积累,单一文件地读取已经不能满足需求了,此时,批量地做就是解放双手地过程。</p>
<p>使用for循环把下载地TCGA数据读入R语言并转换成数据框</p>
<p>使用三个for循环来完成,这是第一个for循环。</p>
<p><strong>1. 把所有数据读入在一个文件夹中</strong></p>
<div class="jb51code"><pre class="brush:plain;">dir.create("data_in_one") #创建目标文件夹,也可右键创建
dir("rawdata/") #查看原路径的内容
for (dirname in dir("rawdata/")){  
  ## 1.要查看的单个文件夹的绝对路径
  mydir &lt;- paste0(getwd(),"/rawdata/",dirname)
  ## 2.找到对应文件夹中的文件并提取名称,pattern表示模式,可以是正则表达式
  file &lt;- list.files(mydir,pattern = "*.counts")
  ## 3.当前文件的绝对路径是
  myfile &lt;- paste0(mydir,"/",file)
  ## 4.复制这个文件到目的文件夹
  file.copy(myfile,"data_in_one")  
}</pre></div>
<p><strong>2. 寻找TCGA ID并让文件名称和TCGA ID保持一致。</strong></p>
<p>第二个for循环。文件名称和TCGA ID的对应关系,藏在了metadata中。</p>
<div class="jb51code"><pre class="brush:plain;">metadata &lt;- jsonlite::fromJSON("data/metadata.cart.2021-05-28.json")
metadata_id &lt;- metadata[,c("file_name","associated_entities")]
## 1.准备容器,已经存在,我们把新数据添加在第三列
metadata_id
## 2.循环操作
for (i in 1:nrow(metadata_id)){
print(i)
metadata_id &lt;- metadata_id$associated_entities[]$entity_submitter_id
}
## 重新命名
colnames(metadata_id) &lt;- "TCGA_id"
</pre></div>
<p>行排序,为了把文件名称和TCGA_id对应起来。读入的顺序和复制到新路径的顺序不一致,这一步的目的是让其保持一致。</p>
<div class="jb51code"><pre class="brush:plain;">rownames(metadata_id) &lt;- metadata_id[,1]
metadata_id &lt;- metadata_id
</pre></div>
<p><strong>3. 输入文件名并提取文件的第二列(counts列)</strong></p>
<div class="jb51code"><pre class="brush:plain;">#install.packages("data.table")
#构建函数
myfread &lt;- function(files){
data.table::fread(paste0("data_in_one/",files))$V2
}
## 测试文件
test &lt;- myfread(files)
</pre></div>
<p><strong>4.1 使用for循环来批量读入并整合到一个数据框。</strong></p>
<div class="jb51code"><pre class="brush:plain;">## 1.创建容器
gene_id &lt;- data.table::fread(paste0("data_in_one/",files))$V1
expr_df &lt;- data.frame(gene_id=gene_id)
## 2.按照列读入
for (i in 1:length(files)){
  print(i)
  expr_df[,i+1] = myfread(files)
}

## 增加列名
colnames(expr_df) &lt;- c("gene_id",metadata_id$TCGA_id)

### 意外发现
tail(expr_df$gene_id,10)
### 去掉最后5行
(nrow(expr_df)-5)
expr_df &lt;- expr_df
save(expr_df,file = "output/BRCA_RNASEQ_exprdf.Rdata")</pre></div>
<p><strong>4.2 使用lapply + function 模式</strong></p>
<p>1.函数</p>
<div class="jb51code"><pre class="brush:plain;">myfread &lt;- 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))$V1</pre></div>
<p>到此这篇关于R语言批量读取某路径下文件内容的方法的文章就介绍到这了,更多相关R语言批量读取文件内容请搜索琼殿技术社区以前的文章或继续浏览下面的相关文章希望大家以后多多支持琼殿技术社区!</p>
                           
                            <div class="art_xg">
                              <b>您可能感兴趣的文章:</b><ul><li>R语言-如何读写带分隔符的文件</li><li>R语言开发之CSV文件的读写操作实现</li><li>R语言实现二进制文件读写操作</li><li>R语言文本文件读写(txt/csv/xlsx)</li><li>R语言读取xls与xlsx格式文件过程</li><li>R语言处理JSON文件的方法</li><li>R语言rhdf5读写hdf5并展示文件组织结构和索引数据</li></ul>
                            </div>

                        </div>
                        <!--endmain-->
頁: [1]
查看完整版本: R语言批量读取某路径下文件内容的方法