Как вы читаете в несколько файлов.txt в R?

Я использую R для визуализации некоторых данных в формате.txt. В каталоге несколько сотен файлов, и я хочу загрузить все это в одну таблицу за один раз.

Любая помощь?

РЕДАКТИРОВАТЬ:

Перечисление файлов не является проблемой. Но у меня возникают проблемы при переходе от списка к контенту. Я попробовал часть кода здесь, но я получаю ошибку с этой частью:

all.the.data <- lapply( all.the.files,  txt  , header=TRUE)

поговорка

 Error in match.fun(FUN) : object 'txt' not found

Будем весьма благодарны за любые фрагменты кода, которые прояснят эту проблему.

5 ответов

Решение

Спасибо за ответы на все вопросы!

Тем временем я также взломал метод самостоятельно. Дайте мне знать, если это будет полезно:

library(foreign)

setwd("/path/to/directory")

files <-list.files()

data <- 0


for (f in files) {

tempData = scan( f, what="character")

data <- c(data,tempData)    

} 

Вы можете попробовать это:

filelist = list.files(pattern = ".*.txt")

#assuming tab separated values with a header    
datalist = lapply(filelist, function(x)read.table(x, header=T)) 

#assuming the same header/columns for all files
datafr = do.call("rbind", datalist) 

Существует два быстрых способа чтения нескольких файлов и помещения их в один фрейм данных или таблицу данных.

С помощью fread() ж / rbindlist() от data.table пакет

# List all txt files including sub-folders
list_of_files <- list.files(path = ".", recursive = TRUE,
                            pattern = "\\.txt$", full.names = TRUE)

library(data.table)

# Read all the files and create a FileName column to store filenames
DT <- rbindlist( sapply(list_of_files, fread, simplify = FALSE),
                 use.names = TRUE, idcol = "FileName" )

С помощью purrr::map_df() а также readr::read_table2() от tidyverse пакет:

library(tidyverse)

# Read all the files and create a FileName column to store filenames
df <- list_of_files %>%
  set_names(.) %>%
  map_df(read_table2, .id = "FileName")

Примечание: чтобы очистить имена файлов, используйте basename или же gsub функции


Редактировать: читать несколько csv файлы и пропустить header

df <- list_of_files %>%
  purrr::set_names(nm = (basename(.) %>% tools::file_path_sans_ext())) %>%
  purrr::map_df(read_csv, 
                col_names = FALSE,
                skip = 1,
                .id = "fileName")

Есть действительно очень простой способ сделать это сейчас: пакет readtext.

readtext::readtext("path_to/your_files/*.txt")

Это действительно так просто.

Посмотрите на помощь для функций dir() ака list.files(), Это позволяет получить список файлов, возможно, отфильтрованных по регулярным выражениям, по которым вы можете зацикливаться.

Если вы хотите использовать их все сразу, сначала вы должны иметь содержимое в одном файле. Один вариант будет использовать cat ввести все файлы в stdout и читать это с помощью popen(), Увидеть help(Connections) для большего.

Другие вопросы по тегам