Nicht eindeutig systematische CSV Datei einlesen

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

Moderatoren: EDi, jogo

Antworten
MauiPi
Beiträge: 1
Registriert: Do Mär 11, 2021 6:52 am

Nicht eindeutig systematische CSV Datei einlesen

Beitrag von MauiPi »

Hallo Zusammen,

ich habe ein Problem. Da ich auch sehr neu in R bin, komme ich nicht auf die Lösung.
Ich habe eine CSV Datei, die nicht so einfach in R einzulesen ist.
Die Datei besteht aus einem Header und dann eine Zusammenfassung einer Messung und danach die einzelne Messpunkte. Die Zusammenfassung und die Messpunkte wiederholen sich. Es kommt drauf an wieviele Slots ausgewählt sind.
Die Anzahl an Slots und Messpunkten kann auch variieren.
Ich brauche eigentlich den Slot in einer neuen Spalte zu den jeweiligen Messpunkten.

Hättet ihr eine Idee für einen Ansatz. Will es ja letztendlich selbst lösen.
Ich hatte an eine Do While Schleife gedacht, aber ich weiß nicht wie ich diese mit dem Einlesen der Datei kombinieren kann.

Vielleicht hat jemand von euch eine Idee.

Schönen Gruß

Da ich die Datei nicht hochladen kann, hier ein Auszug:

Code: Alles auswählen

Cassette: ,860 20pkt
COLLECTION DATE/TIME: ,3/10/2021 17:26:57
PROCESS DATE/TIME: ,3/10/2021 3:14:7
EQUIPMENT: ,
OPERATOR: ,
SHIFT: ,
MACHINE TYPE: ,UV



WAFER ID,"2021/03/10 17:30 01",
LOT ID,"pr 111",
Cassette,Left,
SLOT,1,
STATUS,"",
DATA TYPE,DBS,
RECIPE,"860",
RCP CNT,1,
MEAS,
MATERIAL,"*",
SITE,1,
RESULT TYPE,1st Thickness,GOF ,
MEAN, 874.2301,0.9765,
MIN, 873.2364,0.9650,
MAX, 875.2503,0.9833,
% STD DEV, 0.0662, 0.5901,
3 SIGMA, 0.1985, 1.7703,
RANGE, 2.0139,0.0182,
Site #,Value,Value, X , Y ,
1, 8737.0840,0.9743, 0.0000, 0.0000,
2, 8736.3779,0.9774,-10.3096, 10.3096,
3, 8737.5850,0.9818,-10.3096,-10.3096,
4, 8734.7256,0.9650, 14.5800, 0.0000,
5, 8740.7627,0.9801,-29.0700, 0.0000,
6, 8741.9824,0.9808, 20.5556,-20.5556,
7, 8738.5195,0.9657, 20.5556, 20.5556,
8, 8745.0342,0.9770,-30.9925, 30.9925,
9, 8744.3164,0.9666,-30.9925,-30.9925,
10, 8744.9326,0.9765, 43.8300, 0.0000,
11, 8749.4043,0.9825, 0.0000, 58.5000,
12, 8749.7051,0.9833, 41.3657, 41.3657,
13, 8749.5391,0.9787, 41.3657,-41.3657,
14, 8752.5029,0.9785,-58.5000, 0.0000,
15, 8745.4785,0.9742,-51.6754, 51.6754,
16, 8745.9590,0.9778, 73.0800, 0.0000,
17, 8745.6064,0.9697,-51.6754,-51.6754,
18, 8739.1611,0.9832,-87.3000, 0.0000,
19, 8732.3643,0.9820, 61.7305, 61.7305,
20, 8734.9668,0.9755, 61.7305,-61.7305,

WAFER ID,"2021/03/10 17:33 02",
LOT ID," pr 111",
Cassette,Left,
SLOT,2,
STATUS,"",
DATA TYPE,DBS,
RECIPE,"860",
RCP CNT,1,
MEAS,
MATERIAL,"",
SITE,1,
RESULT TYPE,1st Thickness,GOF ,
MEAN, 875.6298,0.9761,
MIN, 874.7736,0.9629,
MAX, 876.3822,0.9833,
% STD DEV, 0.0593, 0.6454,
3 SIGMA, 0.1778, 1.9362,
RANGE, 1.6086,0.0204,
Site #,Value,Value, X , Y ,
1, 8747.7363,0.9726, 0.0000, 0.0000,
2, 8751.1738,0.9773,-10.3096, 10.3096,
3, 8750.8730,0.9818,-10.3096,-10.3096,
4, 8749.7461,0.9629, 14.5800, 0.0000,
5, 8753.4688,0.9807,-29.0700, 0.0000,
6, 8758.1240,0.9807, 20.5556,-20.5556,
7, 8754.3555,0.9629, 20.5556, 20.5556,
8, 8757.3809,0.9764,-30.9925, 30.9925,
9, 8758.0986,0.9676,-30.9925,-30.9925,
10, 8759.1973,0.9771, 43.8300, 0.0000,
11, 8763.1465,0.9821, 0.0000, 58.5000,
12, 8763.8223,0.9832, 41.3657, 41.3657,
13, 8763.6719,0.9777, 41.3657,-41.3657,
14, 8762.5059,0.9778,-58.5000, 0.0000,
15, 8761.1328,0.9738,-51.6754, 51.6754,
16, 8759.4209,0.9774, 73.0800, 0.0000,
17, 8758.3916,0.9686,-51.6754,-51.6754,
18, 8751.7070,0.9833,-87.3000, 0.0000,
19, 8750.3535,0.9822, 61.7305, 61.7305,
20, 8751.6582,0.9753, 61.7305,-61.7305,
Zuletzt geändert von jogo am Mi Mär 17, 2021 8:55 am, insgesamt 1-mal geändert.
Grund: Formatierung verbessert, siehe http://forum.r-statistik.de/viewtopic.php?f=20&t=29
jogo
Beiträge: 2086
Registriert: Fr Okt 07, 2016 8:25 am

Re: Nicht eindeutig systematische CSV Datei einlesen

Beitrag von jogo »

Hallo MauiPi,

willkommen im Forum!
Das ist nicht gerade eine typische Aufgabe für R.
Eher würde ich sowas mit PERL https://de.wikipedia.org/wiki/Perl_(Programmiersprache) oder (etwas oldstyle) AWK anfassen https://de.wikipedia.org/wiki/Awk .
Einmal habe ich sowas Ähnliches auch schon mal mit sed gemacht (wahrscheinlich noch mehr oldstyle) https://de.wikipedia.org/wiki/Sed_(Unix) .

R hat zwar alle nötigen Operatoren an Bord, aber die Organisation rundherum wäre nicht ganz trivial und sähe ein wenig danach aus als ob Du mit einem Oszilloskop und einer Stoppuhr die Höhe eines Hauses messen wolltest.

Gruß, Jörg
bigben
Beiträge: 2778
Registriert: Mi Okt 12, 2016 9:09 am

Re: Nicht eindeutig systematische CSV Datei einlesen

Beitrag von bigben »

@Jörg: Profitipp, Du brauchst gar keine Stoppuhr, wenn Du ein Oszilloskop und einen präzisen Taktgenerator hast... :lol:

@Maupi: Was ist ein Slot? Die Funktion read.csv() hat zwei interessante Parameter, nämlich skip= und nrow=
Wenn Deine Datei also mehrere Abschnitte enthält, die jeweils für sich aus gültigem CSV bestehen, kann man so einen Abschnitt mit read.csv lesen. Man muss halt wissen, wieviele Zeilen vor Beginn des csv-Blocks kommen und wie lang der CSV-Block ist. Ein Oszilloskop in R sind reguläre Ausdrücke "regex" beispielsweise in der Familie der grep() Funktionen. Sehr, sehr viele, sehr gut optimierte Funktionen zum durchsuchen und manipulieren von Texten enthält auch das Zusatzpaket stringi. Wer aufwändige Dinge mit R und Text vor hat, sollte sich dieses Paket vorher einmal anschauen: https://stringi.gagolewski.com

Gleich beim ersten Einlesen der Daten (um herauszufinden, wo welche "slots" stehen und wo CSV-Abschnitte anfangen und aufhören) stellt sich die Frage, ob man die Daten mit readLines oder mit stringi::stri_read_lines einlesen will.

LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
jogo
Beiträge: 2086
Registriert: Fr Okt 07, 2016 8:25 am

Re: Nicht eindeutig systematische CSV Datei einlesen

Beitrag von jogo »

bigben hat geschrieben: Mi Mär 17, 2021 11:16 am @Jörg: Profitipp, Du brauchst gar keine Stoppuhr, wenn Du ein Oszilloskop und einen präzisen Taktgenerator hast... :lol:
Das war nur eine Referenz an einen alten Witz:
Wie misst man mit Oszilloskop und Stoppuhr die Höhe eines Hauses?
Antwort:
Oszilloskop runterschmeißen, Zeit stoppen, ausrechnen. :?

Gruß, Jörg
bigben
Beiträge: 2778
Registriert: Mi Okt 12, 2016 9:09 am

Re: Nicht eindeutig systematische CSV Datei einlesen

Beitrag von bigben »

Ja, das waren noch Zeiten. Damals wurden Oszilloskope noch robust aus echtem Kruppstahl aus dem Ganzen gefeilt. Die Chinadinger von heute würden bei sowas glatt kaputt gehen...
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Benutzeravatar
EDi
Beiträge: 1599
Registriert: Sa Okt 08, 2016 3:39 pm

Re: Nicht eindeutig systematische CSV Datei einlesen

Beitrag von EDi »

Ich würde:

1. Zeilenweise einlesen mit readLines()
2. Trennen und in eine Liste packen mit split()
3. Eine Funktion schreiben dir mir für jeden teil das parsed
3.1 Unnötige Zeile rauswerfen (grepl() oder so)
3.2 Den strukturierten Teil mit read.table in eine Tabelle packen: read.table(textConnection(x))
4. Die geparsten Einzeileteile wieder zusammenfügen (z.b. data.table::rbindlist)
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.
Antworten