Come si legge in più file .txt in R?

Sto usando R per visualizzare alcuni dati che sono tutti in formato .txt. Ci sono alcune centinaia di file in una directory e voglio caricarlo tutto in una tabella, in un colpo solo.

Qualsiasi aiuto?

MODIFICARE:

L’elenco dei file non è un problema. Ma sto avendo problemi ad andare dalla lista al contenuto. Ho provato un po ‘del codice da qui , ma ho un bug con questa parte:

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

detto

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

Qualsiasi frammento di codice che chiarisca questo problema sarebbe molto apprezzato.

Puoi provare questo:

 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) 

Guarda l’aiuto per le funzioni dir() aka list.files() . Ciò consente di ottenere un elenco di file, eventualmente filtrati da espressioni regolari, su cui è ansible eseguire il ciclo.

Se li vuoi tutti in una volta, devi prima avere contenuto in un file. Un’opzione sarebbe quella di usare cat per digitare tutti i file su stdout e leggerli usando popen() . Vedi help(Connections) per ulteriori informazioni.

Grazie per tutte le risposte!

Nel frattempo, ho anche hackerato un metodo per conto mio. Fammi sapere se è utile:

 library(foreign) setwd("/path/to/directory") files < -list.files() data <- 0 for (f in files) { tempData = scan( f, what="character") data <- c(data,tempData) } 

Esistono due modi rapidi per leggere più file e inserirli in un singolo frame di dati o data.table

Utilizzo di fread dal pacchetto 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" ) 

Usando purrr::map_df e readr::read_table2 dal pacchetto 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") 

Nota: per pulire i nomi dei file, utilizzare le funzioni basename o gsub

C’è un modo davvero semplice per farlo ora: il pacchetto readtext .

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

È davvero così facile.