R如何将gz表读取到数据帧列表

时间:2018-09-21 19:30:02

标签: r

我在文件夹中存储了一堆文件,每个文件夹都有一个包含txt文件的gz文件。我正在尝试将所有数据读入数据帧列表,以便可以使用join函数并获取所有数据的一个数据帧。 所有的txt文件看起来都是这样(只是更长):

ENSG00000242268.2 4.121822e-01
ENSG00000270112.3 6.127670e-02
ENSG00000167578.15 4.284772e+00

我尝试了以下代码:

files <- list.files(path= getwd(),full.names = TRUE)
transcriptome_profiling <- list()
for (i in length(files)) {
  gzfiles <- list.files(path = files[i],full.names = TRUE)
  readgzf <- gzfile(description = gzfiles)
  transcriptome_profiling[[i]] <- read.table(file = readgzf)
}

在这种情况下,只有列表中的最后一个对象包含数据,其余均为NULL

我也尝试过以下代码:

 files <- list.files(path= getwd(), full.names = TRUE)
 #reading all the gz file from within the folder in the root
 data <-lapply(files, function(x) {
     transcriptome_profiling <-data.frame(read.delim(file = gzfile(description = list.files(path = x,full.names = TRUE, pattern = "\\.gz$"))))
 })

但是我只得到列表的列表。

关于如何获取要与join函数一起使用的数据帧列表的任何想法?

1 个答案:

答案 0 :(得分:0)

您的第一次尝试有一个小错误:

for (i in length(files)) # i is always 1
for (i in 1:length(files)) # i changes based on number of files

使用更正的第一次尝试或第二次尝试,一旦有了列表,就可以命名它以指示文件名:

names(transcriptome_profiling) = files
transcriptome_profiling_df = data.table::rbindlist(transcriptome_profiling, idcol = "filename")

如果您希望每个数据都是一列,则可以使用tidyr::spread或代替上面的rbindlist,也可以使用dplyr::bind_cols