Fehler beim Einlesen *.csv

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

Moderatoren: EDi, jogo

Antworten
Regression
Beiträge: 76
Registriert: Mo Jan 15, 2018 9:57 am

Fehler beim Einlesen *.csv

Beitrag von Regression »

Guten Tag Zusammen,

beim Einlesen einer *.csv Datei werden einige Spalten nicht separiert, die meisten allerdings schon.
Angehängt ist ein kleiner Auszug aus >8k Problemzeilen.
SampleData.csv
(568 Bytes) 73-mal heruntergeladen
Das Separierungszeichen stellt dabei der Semicolon dar.
Eigentlich sollen es 15 Spalten sein.
Leider kann ich nicht erkennen, wo das Problem liegt und wie man es lösen könnte.
Das Einlesen im RStudio geschiet mit folgendem Code:

Code: Alles auswählen

library(readr)
SampleData <- read_delim("SampleData.csv", 
    ";", escape_double = FALSE, trim_ws = TRUE)
View(SampleData)
Ich Danke Euch vielmals für Lösungsvorschläge oder Anregungen!

Herzliche Grüße
Regression
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Fehler beim Einlesen *.csv

Beitrag von bigben »

Hallo Regression,

ich weiß nicht, was das für komische Daten sind, aber in Deinem Beispiel erkenne ich zwei Probleme. Erstmal bekomme ich eine Fehlermeldung, dass die letzte=dritte Zeile unvollständig sei. Zum anderen passieren da ganz wilde Dinge mit Anführungszeichen in Deinem File.

Wenn ich R sage, dass an Semicolons getrennt wird, dass es Anführungszeichen nicht beachten soll und dass es nur die ersten zwei Zeilen lesen soll, kann ich Deine Daten lesen:

Code: Alles auswählen

> sampleData <- read.csv("http://forum.r-statistik.de/download/file.php?id=362", 
+                        header=FALSE, sep=";", quote=NULL, nrows=2)
> str(sampleData)
'data.frame':	2 obs. of  15 variables:
 $ V1 : Factor w/ 2 levels "\"1\"","\"2\"": 1 2
 $ V2 : Factor w/ 2 levels "\"Customer","\"Prospect": 1 2
 $ V3 : Factor w/ 2 levels "PET- Gest<e3>o de P de Ab, Uni",..: 2 1
 $ V4 : logi  NA NA
 $ V5 : Factor w/ 2 levels "{071094-DB92-E711-82F4-0050586A6C}",..: 1 2
 $ V6 : logi  NA NA
 $ V7 : Factor w/ 2 levels "BPT\\PTC14525",..: 2 1
 $ V8 : Factor w/ 2 levels "3060-132","8500-801": 2 1
 $ V9 : Factor w/ 2 levels "AVT","CAE": 1 2
 $ V10: Factor w/ 2 levels "Edificio, Lo 7  AVa Com Lus",..: 1 2
 $ V11: int  176633294 5040306
 $ V12: logi  NA NA
 $ V13: Factor w/ 2 levels "2017-09-06 08:14:31",..: 1 2
 $ V14: Factor w/ 2 levels "2018-04-26 20:07:46",..: 1 2
 $ V15: Factor w/ 2 levels "BPT - S - Dct - Coa\"\",\"",..: 2 1
Warum Du das readr package brauchst, ob sich das Problem der letzten ZEile häufiger in Deinem Datensatz findet etc., das weiß ich natürlich nicht. CSV ist aber kein wirklich standardisiertes Format und deshalb kann man mit Anführungszeichen machen, was man möchte.

Hilft das?

LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
bigben
Beiträge: 2771
Registriert: Mi Okt 12, 2016 9:09 am

Re: Fehler beim Einlesen *.csv

Beitrag von bigben »

Nachtrag: Wenn ich die letzte Zeile in Deiner Beispieldatei mit einem Return abschließe, dann kann ich die Datei jetzt problemlos lesen:

Code: Alles auswählen

> sampleData <- read.csv(choose.files(), 
+                        header=FALSE, sep=";", quote=NULL
+                        )
> str(sampleData)
'data.frame':	3 obs. of  15 variables:
 $ V1 : Factor w/ 3 levels "\"1\"","\"2\"",..: 1 2 3
 $ V2 : Factor w/ 2 levels "\"Customer","\"Prospect": 1 2 2
 $ V3 : Factor w/ 3 levels "Aul","PET- Gest<e3>o de P de Ab, Uni",..: 3 2 1
 $ V4 : logi  NA NA NA
 $ V5 : Factor w/ 3 levels "{071094-DB92-E711-82F4-0050586A6C}",..: 1 3 2
 $ V6 : logi  NA NA NA
 $ V7 : Factor w/ 3 levels "BPT\\PTC14525",..: 2 1 3
 $ V8 : Factor w/ 3 levels "2855-591","3060-132",..: 3 2 1
 $ V9 : Factor w/ 3 levels "AVT","CAE","Cios": 1 2 3
 $ V10: Factor w/ 3 levels "Edificio, Lo 7  AVa Com Lus",..: 1 2 3
 $ V11: int  176633294 5040306 5039644
 $ V12: logi  NA NA NA
 $ V13: Factor w/ 3 levels "2017-09-06 08:14:31",..: 1 2 3
 $ V14: Factor w/ 3 levels "2018-04-26 20:07:46",..: 1 2 3
 $ V15: Factor w/ 3 levels "BPT - S - Dct - Coa\"\",\"",..: 2 1 3
Soweit das gegebene Beispiel geht, ist das Problem also gelöst.

LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Regression
Beiträge: 76
Registriert: Mo Jan 15, 2018 9:57 am

Re: Fehler beim Einlesen *.csv

Beitrag von Regression »

Guten Morgen Bernhard,

du hast abloulut Recht, die Daten sind recht unsauber, allerdings habe ich, um die Daten online stellen zu können, auch einige "unkritische" Zeichen gelöscht.
Mit read.csv2 und quote = NULL, funktioniert es einwandfrei!
Danke!

Freundliche Grüße
Regression
Antworten