Exceldateien untereinanderhängen

Wie rufe ich R-Funktionen auf, wie selektiere ich Daten, ich weiß nicht genau ....

Moderatoren: EDi, jogo

Antworten
DanielAC
Beiträge: 18
Registriert: Do Dez 12, 2019 3:01 pm

Exceldateien untereinanderhängen

Beitrag 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
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Exceldateien untereinanderhängen

Beitrag 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
DanielAC
Beiträge: 18
Registriert: Do Dez 12, 2019 3:01 pm

Re: Exceldateien untereinanderhängen

Beitrag 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
jogo
Beiträge: 2085
Registriert: Fr Okt 07, 2016 8:25 am

Re: Exceldateien untereinanderhängen

Beitrag 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
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: Exceldateien untereinanderhängen

Beitrag von EDi »

probier mal readxl::read_xlsx, sollte ~2x schneller sein...
Bitte immer ein reproduzierbares Minimalbeispiel angeben. Meinungen gehören mir und geben nicht die meines Brötchengebers wieder.

Dieser Beitrag ist lizensiert unter einer CC BY 4.0 Lizenz
Bild.
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Exceldateien untereinanderhängen

Beitrag 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
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Athomas
Beiträge: 768
Registriert: Mo Feb 26, 2018 8:19 pm

Re: Exceldateien untereinanderhängen

Beitrag 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)
DanielAC
Beiträge: 18
Registriert: Do Dez 12, 2019 3:01 pm

Re: Exceldateien untereinanderhängen

Beitrag 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....
Athomas
Beiträge: 768
Registriert: Mo Feb 26, 2018 8:19 pm

Re: Exceldateien untereinanderhängen

Beitrag 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)!?
Antworten