Seite 1 von 1

Exceldateien untereinanderhängen

Verfasst: Do Dez 12, 2019 3:06 pm
von DanielAC
Hallo zusammen,

ich möchte mehrere (einige hundert bis tausend) Exceldateien in R einlesen und untereinanderhängen.
Bis jetzt habe ich das über folgenden Code realisiert:

Code: Alles auswählen

library(xlsx)

Verzeichnis<-"..\\Arbeitsverzeichnis"

setwd(Verzeichnis)

dateien <- list.files(Verzeichnis)

result<-data.frame(0, 0, 0, 0)

for(i in 1:length(dateien)){
  
  
  temp<- read.xlsx(dateien[i], 1)
  temp <- temp[,1:3]
  temp[,4]<-dateien[i]
  
  result <- rbind(result, temp)
  
  zeile<-dim(temp)[1]
  
}
Grundsätzlich funktioniert das auch, aber es dauert schon recht lange. Die einzelnen Dateien sind rund 40-50kb groß und bestehen nur aus einem Blatt.
Kann man das irgendwie beschleunigen?

VG
Daniel

Re: Exceldateien untereinanderhängen

Verfasst: Do Dez 12, 2019 3:13 pm
von jogo
Hallo Daniel,

willkommen im Forum!
Ich sehe momentan nichts, worin man das Einlesen wesentlich beschleunigen könnte.
Meine Empfehlung:
nur einmal das Rudel Excel-Dateien einlesen und das Ergebnis dann mit save() oder save.image() speichern;
das anschließende load() ist extrem schnell im Vergleich zum Einlesen von Excel-Dateien.

Gruß, Jörg

Re: Exceldateien untereinanderhängen

Verfasst: Do Dez 12, 2019 3:19 pm
von DanielAC
Hallo Jörg,

danke für den Tipp. Im Prinzip möchte ich nur alles untereinanderhängen um es dann in Excel weiterzuverabeiten. Ich hatte das anfangs mit VBA gemacht (das geht auch ;-) ), aber das war noch langsamer.
Vielleicht versuche ich mal, die Exceldateien direkt als CSV zu erstellen. Dann geht das Öffnen und Schreiben deutlich schneller...

VG
Daniel

Re: Exceldateien untereinanderhängen

Verfasst: Do Dez 12, 2019 3:24 pm
von jogo
Hallo Daniel,
DanielAC hat geschrieben: Do Dez 12, 2019 3:19 pm Vielleicht versuche ich mal, die Exceldateien direkt als CSV zu erstellen. Dann geht das Öffnen und Schreiben deutlich schneller...
bei echten Gleitkommazahlen verlierst Du u.U. gültige Stellen.
Nur Du kannst beurteilen, ob bei Deinen Daten dieses Vorgehen angebracht ist.

Ansonsten gilt hier im Forum häufig:

Code: Alles auswählen

fortunes::fortune(230)
Gruß, Jörg

Re: Exceldateien untereinanderhängen

Verfasst: Do Dez 12, 2019 3:52 pm
von EDi
probier mal readxl::read_xlsx, sollte ~2x schneller sein...

Re: Exceldateien untereinanderhängen

Verfasst: Do Dez 12, 2019 4:06 pm
von bigben
DanielAC hat geschrieben: Do Dez 12, 2019 3:19 pm Im Prinzip möchte ich nur alles untereinanderhängen um es dann in Excel weiterzuverabeiten. Ich hatte das anfangs mit VBA gemacht (das geht auch ;-) ), aber das war noch langsamer.
Das ist nicht ganz leicht nachzuvollziehen. Nachdem Du gesehen hast, das Excel mit Deinen Datenmengen nicht mehr effizient genug ist, willst Du mit den Daten zurück in Excel :?: Wenn der dämliche Transfer von Excel nach R einmal gelungen ist, spricht von da ab doch alles dafür, große Datenmengen in R statt in Excel zu verarbeiten. Nun, wie jogo schon verlinkt hat...
Vielleicht versuche ich mal, die Exceldateien direkt als CSV zu erstellen. Dann geht das Öffnen und Schreiben deutlich schneller...
Wenn der Weg über csv gangbar ist, macht der natürlich alles leichter: Man könnte jede Datei als String einlesen und die einfach wie in einem Editor hintereinander kopieren, ohne dass eine Funktion wie read.table/read.csv vorher versucht, die Daten zu "verstehen". Ich habe jetzt keinen fertigen Code denke aber an einen Aufruf von readLines() pro Datei, dass man dann alle Dateien hintereinanderklatscht und anschließend mit writeLines() eine gemeinsame Datei schreibt.

LG,
Bernhard

Re: Exceldateien untereinanderhängen

Verfasst: Do Dez 12, 2019 6:52 pm
von Athomas
Ich sehe gerade, dass Du in jedem Schritt ein Inkrement an die bisherige Gesamtdatei anhängst - dizz, dizz :shock: !
Besser ist, die Teildateien in einer Liste zu horten und abschließend zusammenzubinden...

Code: Alles auswählen

do.call("rbind", xls.Liste)

Re: Exceldateien untereinanderhängen

Verfasst: Fr Dez 13, 2019 12:33 pm
von DanielAC
Danke für die Antworten.

mit read_xlsx bin ich tatsächlich deutlich schneller unterwegs.

Mir ist schon klar, dass es nicht schön ist, Daten aus Excel einzulesen, in R zu verarbeiten und dann mit Excel weiterzuverarbeiten. Aber die Struktur der Tabellen erfordert etwas intensivere Nachbearbeitung und in Excel sind das für mich ein paar Klicks. In R würde das sicher auch gehen. Aber ich weiß nicht, wie ;-)...

Vielleicht versuche ich da mal etwas....

Re: Exceldateien untereinanderhängen

Verfasst: Fr Dez 13, 2019 1:10 pm
von Athomas
Grundsätzlich funktioniert das auch, aber es dauert schon recht lange.
Was heißt denn "recht lange"?
Bei mir dauert es in der langsamsten Variante etwas mehr als eine Minute (1000 .xlsx-Dateien mit je ~ 40KB)!?