一次将多个.tsv文件作为数据帧导入

时间:2019-07-28 15:29:52

标签: r

我有N个.tsv文件保存在名为“ data”的文件中,并保存到我的rstudio工作目录中,我想找到一种将它们作为单独的数据帧立即导入的方法。下面是一个示例,当我尝试一个接一个地执行时,但示例太多了,我想更快地进行操作。而且每次它们的总数可能都不同。

#read files into R
f1<-read.table(file = 'a_CompositeSources/In1B1A_WDNdb_DrugTargetInteractions_CompositeDBs_Adhesion.tsv', sep = '\t', header = TRUE)
f2<-read.table(file = 'a_CompositeSources/In1B2A_WDNdb_DrugTargetInteractions_CompositeDBs_Cytochrome.tsv', sep = '\t', header = TRUE)

我用过:

library(readr)
library(dplyr)
files <- list.files(path = "C:/Users/user/Documents/kate/data", pattern = "*.tsv", full.names = T)
tbl <- sapply(files, read_tsv, simplify=FALSE) %>% 
  bind_rows(.id = "id") 


##Read files named xyz1111.csv, xyz2222.csv, etc.
filenames <- list.files(path="C:/Users/user/Documents/kate/data",
                        pattern="*.tsv")

##Create list of data frame names without the ".csv" part 
names <-gsub(".tsv", "", filenames)

###Load all files
for(i in names){
  filepath <- file.path("C:/Users/user/Documents/kate/data",paste(i,".tsv",sep=""))
  assign(i, read.delim(filepath,
                       colClasses=c("factor","character",rep("numeric",2)),
                       sep = "\t"))
}

但仅读取第一个文件。

1 个答案:

答案 0 :(得分:1)

如果您将所有.tsv文件放在一个文件夹中,并使用lapply或for循环将它们读入列表:

files_to_read <- list.files(path = "a_CompositeSources/",pattern = "\\.tsv$",full.names = T)
all_files <- lapply(files_to_read,function(x) {
   read.table(file = x, 
              sep = '\t', 
              header = TRUE)
})

如果您需要按名称引用文件,则可以执行names(all_files) <- files_to_read。然后,您可以继续使用dplyr软件包中的bind_rows将它们组合到一个数据帧中,或者直接使用数据帧列表。