Importieren von schlecht formatierten Daten in einer Textdatei in R

8

Download eines Datenstapels von einer hasserfüllten lokalen Regierungsseite. Es gibt 77.000 Einträge von Elementen, die in einer einfachen Textdatei genau wie folgt aussehen. Ich muss diesen Dunghaufen als Datenrahmen in R importieren:

%Vor%

Es gibt übliche Zeichenvektoren wie "Instrument", "Grantor" und "PrpId". Wie genau würde ich das in R importieren? Würde das ein Parsing oder Scraping irgendeiner Art beinhalten?

Unnötig zu sagen, dass ich versucht habe, diese Datei nach Excel zu importieren, aber nicht funktioniert hat. Ich denke, R würde viel besser funktionieren, muss nur herausfinden, wie. Danke

    
Elan 09.03.2016, 19:35
quelle

4 Antworten

2

Ich habe eine sehr generische Parsing-Funktion geschrieben, die mit jedem Muster von Trennlinien und Feld-Wert-Trennzeichen umgehen kann, die als parametrisierte Regexe angegeben sind. Es entfernt optional auch nachfolgende Leerzeichen aus den Feldwerten und übergibt Variadic-Argumente an den einzelnen data.frame() -Aufruf, der das resultierende data.frame erstellt.

%Vor%

So verwenden Sie es:

%Vor%

Sie können auch das Argument select angeben, um genau auszuwählen, welche Felder Sie extrahieren möchten:

%Vor%

Ich habe mich sehr bemüht, es so robust wie möglich zu machen. Es behandelt sorgfältig mögliche redundante führende und nachfolgende Trennlinien und behandelt den Fall inkonsistenter Felder zwischen Abschnitten richtig.

Es lohnt sich, diesen letzten Punkt zu betonen. Alle anderen angebotenen Lösungen machen äußerst spröde Annahmen über die Eingabedaten, entweder dass es genau 8 Felder pro Abschnitt immer in der gleichen Reihenfolge gibt, oder dass jeder (möglicherweise fest codierte) Feldname in jedem Abschnitt vorkommt. Wenn diese Annahme verletzt wird, werden diese Lösungen nutzlos. Meine Funktion macht keine Annahmen über Feldnummer, Namen oder Konsistenz. Es ruft dynamisch alle Feldnamen ab, die in jedem Abschnitt vorhanden sind, und erstellt geeignete Vektoren von jedem, wobei NA -Elemente generiert werden, wobei das Feld in einem bestimmten Abschnitt nicht vorhanden ist.

Hier sind einige Beispiele:

%Vor%     
bgoldst 09.03.2016, 21:14
quelle
7

Anfänger mit R, also bin ich sicher, dass die Leute bessere Wege hinzufügen werden, aber hier ist einer, der so lange funktioniert, wie die Felder jedes Datensatzes in Anzahl und Reihenfolge festgelegt sind;

%Vor%     
Joachim Isaksson 09.03.2016 20:59
quelle
2
%Vor%

Sie können damit die gewünschten Dinge auswählen und eine Hilfsfunktion definieren, um jedes Feld zu extrahieren (ähnlich wie bei einer Frage, die ich beantwortete) -on-multiple-criteria / 35900338 # 35900338 "> früher heute )

%Vor%

oder

%Vor%     
rawr 09.03.2016 21:07
quelle
1

Lösung, die nur {base} ohne Regex verwendet. Das ist nicht sehr elegant:

%Vor%     
Adam 09.03.2016 21:29
quelle