2017-04-07 2 views
1

J'utilise les lignes ci-dessous pour lire un fichier texte. Mais, je dois inclure pour lire une liste de fichiers texte, mais pas tous. Comment puis-je y parvenir en R?Lire une liste de fichiers texte dans R en fonction d'une partie de leur nom

J'ai plusieurs dossiers dans le chemin C:/data. c'est à dire. 1998_Data, 1999_Data .... etc. et chaque dossier contient des fichiers texte 01.txt ... 49.txt.

Merci d'avance.

startingDir<-"C:/Data" 
files <- list.files(path = startingDir,pattern = "24.txt",recursive=T,full.names=T) 

J'ai inclus la ligne ci-dessous, mais il ne lit pas tous les 3 fichiers de la liste. Des suggestions?

my_files <- c("24.txt","01.txt","10.txt") 
files <- list.files(path = startingDir,pattern = my_files,recursive=T,full.names=T) 

Répondre

2

C'est parce que pattern attend une expression régulière:

thepattern <- "24\\.txt|01\\.txt|10\\.txt" 
files <- list.files(path = startingDir, 
        pattern = thepattern, 
        recursive=TRUE, 
        full.names=TRUE) 

Gardez à l'esprit que vous devez échapper à la dot, comme il en est autrement interprété comme « quelque chose ».

Si vous voulez automatiser cela, vous pouvez effectuer les opérations suivantes:

my_files <- c("24.txt","01.txt","10.txt") 
my_files <- gsub(".","\\.",my_files, fixed = TRUE) 
my_pattern <- paste(my_files, collapse = "|") 

vous avez besoin fixed = TRUE dans gsub pour éviter le point d'être lu comme « rien ». Voir aussi ?regex

+0

Merci. Votre solution ci-dessus semble fonctionner. Mais, votre code pour l'automatisation ne fonctionne pas. Il ne lit pas tous les fichiers mais lit le premier fichier texte de la liste. – user3408139

+0

@ user3408139 Mon mauvais, j'ai utilisé 'sep' au lieu de' collapse'. Mise à jour du code afin qu'il crée la regex correcte. –

+0

Super .. il travaille maintenant. Merci. – user3408139