2017-07-24 1 views
2

j'ai un répertoire avec des fichiers nommés quelque chose comme name_1_class.csv, name_1_school.csv, ... name_10_class.csv, name_10_school.csvListe des fichiers pour la boucle « i » iteractions

Je lis ces fichiers à partir du répertoire, et après les CSVs, jeux partiels Je les combine dans un seul fichier et l'écris dans un nouveau répertoire qui a un nom d'itération. Bien que j'ai réussi à exécuter ce code avec des index spécifiés directement, je voudrais créer une fonction qui lirait le modèle des fichiers csv basé sur le i comme le nombre d'itérations.

Le code ci-dessous je ne fonctionne évidemment pas, à savoir

school <- list.files(pattern="1-school.csv") 

lorsque 1 est spécifié fonctionne bien, mais je n'ai pas compris comment faire abstraction de l'indexation à i dans regex.

Comment spécifier le modèle en fonction d'une séquence d'itérations? Toutes les suggestions sont appréciées (évidemment je suis nouveau à ceci).

d <- 1:10 

for (i in 1:length(d)) { 

    school <- list.files(pattern=i"-school.csv") 
    class <- list.files(pattern=i"_class.csv") 

    school <- data.frame(lapply(school, read.csv)) 
    class <- data.frame(lapply(class, read.csv)) 

    school <- data.frame(school[, c(2,4,5)]) 
    school$school <- rep("school") 

    class <- data.frame(class[, c(2:4)]) 
    class$class <- rep("class") 


    df <- rbind(school,class) 
    dir.create(paste0("iteration",i), showWarnings = FALSE) 

    write.csv(df, file.path(paste0("iteration",i), "output_file.csv"), row.names=FALSE) 

} 
+0

Quelle est la portée réelle des fichiers que vous voulez lire? –

+0

le nombre total de fichiers dans le répertoire est vingt. deux fichiers pour chaque itération.i.e. dix est la gamme, si je comprends bien la question – Sasha

Répondre

2

Vous pouvez coller le numéro i dans votre chaîne et le rechercher. Comme ceci:

school <- list.files(pattern=paste0(i,"_school.csv")) 
class <- list.files(pattern=paste0(i,"_class.csv")) 

Exemple:

i=1 

list.files(pattern=".csv") 
    "csv1.csv"    "csv2.csv" 

list.files(pattern=paste0(i,".csv")) 
    "csv1.csv" 
0

Vous pouvez utiliser la pâte pour créer des chaînes à partir de variables.

-à-dire

for (i in 1:n){(paste("df",i,sep="") <-read.csv(paste(i,"-school.csv",sep="") } 

Et même pour la classe

+0

Cette méthode doit également utiliser "assign" comme la première partie ne crée qu'une chaîne. – abdnChap