R как прочитать таблицу gz в список данных - PullRequest
0 голосов
/ 21 сентября 2018

У меня есть куча файлов, которые хранятся в папках, в каждой папке есть gz-файл, содержащий 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$"))))
 })

, но я получаю только список списка ..

любые идеи о том, как получить список фреймов данныхиспользовать с функцией соединения?

1 Ответ

0 голосов
/ 22 сентября 2018

В вашей первой попытке есть небольшая ошибка:

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...