Seite 1 von 2
Mehrere text files transponieren und in eine Tabelle zusammenfügen
Verfasst: Fr Mär 15, 2019 12:22 pm
von Julia_E
Hallo,
ich bin relativ neu in R und hoffe mir kann wer helfen:
ich habe einen folder mit 787 text files, die so aussehen:
19.5642 [Mittelwert]
0.4900 [CV]
1.1852 [CS]
Nun würde ich gern alle 787 in eine Tabelle zusammenfügen mit folgendem header:
filename Mittelwert cv cs
Kann mir irgendjemand weiterhelfen?
Vielen Dank schon mal!
LG Julia
Re: Mehrere text files transponieren und in eine Tabelle zusammenfügen
Verfasst: Fr Mär 15, 2019 12:34 pm
von jogo
Hallo Julia,
willkommen im Forum!
Kannst Du uns vier von diesen Dateien bereitstellen, damit wir etwas rumexperimentieren können?
Eigentlich könnte man die Dateien auch hintereinander einlesen:
so ähnlich wie in
https://stackoverflow.com/questions/114 ... es-at-once
und anschließend vom langen Format ins breite Format transformieren:
https://stackoverflow.com/questions/589 ... ide-format
Gruß, Jörg
Re: Mehrere text files transponieren und in eine Tabelle zusammenfügen
Verfasst: Fr Mär 15, 2019 1:45 pm
von Julia_E
Hallo Jörg,
vielen Dank für deine Antwort. Ich werd mir das gleich mal ansehen.
Anbei ist ein zip file mit einem Ordner und ein paar Beispiel Files darin (bei mir sind das Ganze dann fast 800 files).
Super wäre eben wenn jedes file dann eine Zeile in der neuen Tabelle ausmacht (inklusive dem File Namen als Zuordnung):
file Mittelwert cv cs
q230755d.mom 7.585455 0.5663059 1.544483
q1008803.mom 1859.165 0.3 1.0
q1100013.mom 19.5642 0.49 1.1852
q1218303.mom 57.6503 0.49 1.3
- mom.zip
- Besispiel
- (1.16 KiB) 27-mal heruntergeladen
LG
Re: Mehrere text files transponieren und in eine Tabelle zusammenfügen
Verfasst: Fr Mär 15, 2019 2:20 pm
von jogo
Hallo Julia,
hier eine Variante für das Einlesen bis zum Erzeugen des Dataframes im langen Format:
Code: Alles auswählen
setwd("~/Desktop/R.Zeug/Julia_E/mom")
dir() # schauen, ob die Dateien wirklich hier sind
Dateien <- dir()
Lesen <- function(Datei) {
Dat <- read.table(Datei)
Dat$dateiname <- Datei
Dat
}
L <- lapply(Dateien, Lesen)
do.call(rbind, L)
Das liefert bei mir:
Code: Alles auswählen
> do.call(rbind, L)
V1 V2 dateiname
1 1859.1650000 [Mittelwert] q1008803.mom
2 0.3000000 [CV] q1008803.mom
3 1.0000000 [CS] q1008803.mom
4 19.5642000 [Mittelwert] q1100013.mom
5 0.4900000 [CV] q1100013.mom
6 1.1852000 [CS] q1100013.mom
7 57.6505300 [Mittelwert] q1218303.mom
8 0.4900000 [CV] q1218303.mom
9 1.3000000 [CS] q1218303.mom
10 26.7083000 [Mittelwert] q1233003.mom
11 0.6000000 [CV] q1233003.mom
12 1.4000000 [CS] q1233003.mom
13 7.5854550 [Mittelwert] q230755d.mom
14 0.5663059 [CV] q230755d.mom
15 1.5444830 [CS] q230755d.mom
So, auf zum zweiten Teil;
ich habe es mir diesmal einfach gemacht:
Code: Alles auswählen
alleDat <- do.call(rbind, L)
M <- matrix(alleDat$V1, ncol=3, byrow=TRUE)
rownames(M) <- Dateien
M
ergibt:
Code: Alles auswählen
> M
[,1] [,2] [,3]
q1008803.mom 1859.165000 0.3000000 1.000000
q1100013.mom 19.564200 0.4900000 1.185200
q1218303.mom 57.650530 0.4900000 1.300000
q1233003.mom 26.708300 0.6000000 1.400000
q230755d.mom 7.585455 0.5663059 1.544483
Jetzt noch etwas Kosmetik:
und wenn Du möchtest, dann:
Gruß, Jörg
Re: Mehrere text files transponieren und in eine Tabelle zusammenfügen
Verfasst: Fr Mär 15, 2019 2:35 pm
von Julia_E
Hallo Jörg,
vielen Dank für deine Hilfe.
Das ist alles etwas Neuland für mich.
Ich hab deinen code probiert und bei mir kommt das raus (siehe Anhang).
Re: Mehrere text files transponieren und in eine Tabelle zusammenfügen
Verfasst: Fr Mär 15, 2019 2:50 pm
von jogo
Hallo Julia,
klar:
die Datei
alleMomsSammeln.vbs gehört sicher nicht zu den Dateien, die Du einlesen möchtest.
Bitte ändere im Code wie folgt:
So landen in dem Vektor
Dateien nur die Dateinamen, die mit
.mom enden.
Gruß, Jörg
Re: Mehrere text files transponieren und in eine Tabelle zusammenfügen
Verfasst: Fr Mär 15, 2019 3:30 pm
von Julia_E
Hallo Jörg,
sorry, aber ich weiß nicht weiter. Ich steh' beim L <- lapply(Dateien, Lesen) an.
Hab pattern=mom ausprobiert und hab auch probiert alle anderen files aus dem Ordner zu löschen.
Trotzdem kommt:
Error in scan(file = file, what = what, sep = sep, quote = quote, dec = dec, :
line 3 did not have 2 elements
Auf was bezieht sich die "line 3" ? Ich komm leider nicht drauf.
LG
Re: Mehrere text files transponieren und in eine Tabelle zusammenfügen
Verfasst: Fr Mär 15, 2019 3:43 pm
von jogo
Hallo Julia,
normalerweise sind Deine Dateien so aufgebaut, dass in jeder Zeile zwei Elemente stehen:
1. der Zahlenwert
2. [Mittelwert] oder [CV] oder [CS]
Es gibt offensichtlich mindestens eine Datei, bei der das nicht so ist. Bei dieser Datei wird der Fehler beim Lesen der dritten Zeile erkannt.
Bitte ändere die Funktion:
Code: Alles auswählen
Lesen <- function(Datei) {
message(paste0("&&& lese jetzt Datei: ", Datei))
Dat <- read.table(Datei)
Dat$dateiname <- Datei
Dat
}
Kannst Du abschätzen, bei wievielen Dateien dieser Fehler besteht?
Du kannst den Fehler auch eingrenzen, indem Du einzeln nacheinander ausführst:
Code: Alles auswählen
lapply(Dateien[1:100], Lesen)
lapply(Dateien[101:200], Lesen)
lapply(Dateien[201:300], Lesen)
...
So, ich habe jetzt selber etwas rumexperimentiert. Bei mir hat
read.table(Datei, fill=TRUE) geholfen
Code: Alles auswählen
Lesen <- function(Datei) {
message(paste0("&&& lese jetzt Datei: ", Datei))
Dat <- read.table(Datei, fill=TRUE)
Dat$dateiname <- Datei
Dat
}
Gruß, Jörg
Re: Mehrere text files transponieren und in eine Tabelle zusammenfügen
Verfasst: Mo Mär 18, 2019 9:20 am
von Julia_E
Die fill funktion hat geklappt!
Vielen Dank, Jörg!
Re: Mehrere text files transponieren und in eine Tabelle zusammenfügen
Verfasst: Mo Mär 18, 2019 10:07 am
von jogo
Hallo Julia,
Du solltest das Ergebnis gründlich kontrollieren.
Bei mir hat es die Daten in dem Dataframe, in den ich den Fehler eingebaut habe, kräftig durcheinander gewirbelt.
Gruß, Jörg