Enfin, je viens à un problème que le traitement des données très lent et l'ajout de lignes de data.frames
. J'utilise lapply
et dplyr
combinaison pour le traitement des données. OTH, le processus devient très lent car j'ai 20000 lignes dans chaque trame de données multiplié par 100 fichiers dans le répertoire.Comment traiter et combiner data.frames dans une liste avec plus rapidement
Actuellement c'est un col de bouteille énorme pour moi même après lapply
finitions de processus je n'ai pas assez de mémoire au processus bind_rows
.
Voici ma méthode de traitement de données,
d'abord une liste des fichiers
files <- list.files("file_directory",pattern = "w.*.csv",recursive=T,full.names = TRUE)
transformons cette liste de fichiers
library(tidyr)
library(dplyr)
data<- lapply(files,function(x){
tmp <- read.table(file=x, sep=',', header = T,fill=F,skip=0, stringsAsFactors = F,row.names=NULL)%>%
select(A,B, C)%>%
unite(BC,BC,sep='_')%>%
mutate(D=C*A)%>%
group_by(BC)%>%
mutate(KK=median(C,na.rm=TRUE))%>%
select(BC,KK,D)
})
data <- bind_rows(data)
Je reçois une erreur qui dit,
“Error: cannot allocate vector of size ... Mb” ... depends on how much left in my ram. I have 8 Gb ram but seems still struggling;(
J'ai aussi essayé do.call mais rien n'a changé! Qui est ma fonction ou approche amicale pour ce problème? J'utilise R version 3.4.2 et dplyr 0.7.4.
Essayez d'utiliser les fonctions data.table (fread, mise à jour par référence, etc). Je suggère également de lire les fichiers sans manipulation de furrther, puis rbind avec un id et puis exécutez l'analyse une seule fois, regroupés par "BC" et votre nouvel ID de fichier. –
@ r2evans Merci pour les commentaires. Que voulez-vous dire par «ne jamais l'utiliser», je suppose que l'opérateur '%>%' passe tous les fichiers de la liste après avoir lu la fonction 'select'? – Alexander
Vous avez une erreur? Attention? Quelle indication avez-vous que quelque chose ne va pas? Vous devez fournir plus d'informations. Alexander, désolé, le premier '%>%' était un peu hors de l'écran vers la droite quand je l'ai commenté. (Vous devez également inclure tous les paquets utilisés, probablement au moins 'dplyr' et' tidyr'.) – r2evans