2 votes

Chargement de plusieurs CSV vers un objet dans R

J'essaie de prendre un tas de fichiers CSV dans un dossier (certains dans des sous-répertoires) et de les charger tous dans un objet (mêmes colonnes dans chaque CSV). J'ai eu un peu de chance avec rbind, mais je n'ai pas réussi à l'automatiser entièrement.

Le code ci-dessous semblait être proche, mais j'obtiens une erreur.

 mytemp <- list.files(path="/PATH-TO-DIR/", recursive = TRUE, full.names = TRUE, pattern="*.csv")
    int_list = list
    for (i in mytemp.)
    {
      List1 <- read.csv(mytemp[i])[1:6]
      int_list <- rbind(int_list,List1)
    }
    int_list

Je reçois l'erreur suivante :

> int_list = list
> for (i in mytemp)
+ {
+ i
+ List1 <- read.csv(mytemp[i])[1:6]
+ int_list <- rbind(int_list,List1)
+ }
Error in file(file, "rt") : cannot open the connection
In addition: Warning message:
In file(file, "rt") : cannot open file 'NA': No such file or directory
> 

Qu'est-ce que je fais mal (plusieurs choses, je suppose :) ) ?

Je suis nouveau dans R. J'ai surtout de l'expérience avec Java, d'où mon obsession pour les boucles :). Je suis également ouvert aux solutions sans boucles.

Merci !

-S

1voto

Jason Points 1186

Est-ce que ça marche ?

Edit : ajout d'un capteur d'erreur pour read.csv

 mytemp <- list.files(
    path="/PATH-TO-DIR/", 
    recursive = TRUE, 
    full.names = TRUE, 
    pattern="*.csv")
# check here if you're getting NA values somehow, which
# might cause that earlier error.
which(is.na(mytemp))
# if you get any answer other than integer(0), do this:
mytemp <- na.omit(mytemp)

myread <- function(fname, ...) {
    foo <- try(read.csv(fname, ...)[1:6])
    if(class(foo) == "try-error"){
        print(paste("problem reading:", fname))
    } else {
        return(foo)
    }
}

df_list <- lapply(mytemp, myread)
big_df <- do.call(rbind, df_list)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X