2013-06-07 15 views
37
lesen

Ich habe große Datenmenge, die aus etwa 94 Spalten und 3 Millionen Zeilen bestehen. Diese Datei hat sowohl einzelne als auch mehrere Leerzeichen als Trennzeichen zwischen den Spalten. Ich brauche Dazu einige Spalten aus dieser Datei in R. lesen I read.table versucht, mit() mit den Optionen, die in dem unten stehenden Code zu sehen sind, wird der Code unten-Textdatei mit mehreren Leerzeichen als Trennzeichen in R

eingefügt
### Defining the columns to be read from the file, the first 5 column, then we do not read next 24, after this we read next 5 columns. Last 60 columns are not read in- 

    col_classes = c(rep("character",2), rep("numeric", 3), rep("NULL",24), rep("numeric", 5), rep("NULL", 60)) 

### Reading first 100 rows of the data 

    data <- read.table(file, sep = " ",header = F, nrows = 100, na.strings ="", stringsAsFactors= F) 

Da die Datei das einlesen muss haben mehr als ein Leerzeichen als das Trennzeichen zwischen einigen der Spalte, die obige Methode funktioniert nicht. Gibt es eine Methode, mit der wir diese Datei effizient lesen können?

+1

Entfernen Sie einfach das 'sep =" "' Argument. 'read.table' kann standardmäßig mehrere Leerzeichen behandeln. –

+0

Ich habe ein sehr ähnliches Problem, aber ich brauche eine allgemeinere Lösung, da ich in einigen Feldern einzelne Leerzeichen habe. Das bedeutet, dass ich in der Lage sein sollte, die Mindestanzahl von aufeinanderfolgenden Leerzeichen (in meinem Fall 2) als Trennzeichen zu definieren, ohne Begrenzung dafür. – EdM

+0

Related Post: https://StackOverflow.com/Questions/30955464/Reading-Ausgerichtete-column-Data-mit-Fread – zx8754

Antwort

49

Sie müssen Ihr Trennzeichen ändern. " " bezieht sich auf ein Leerzeichen. "" bezieht sich auf jede beliebige Länge Leerzeichen als Trennzeichen sein

data <- read.table(file, sep = "" , header = F , nrows = 100, 
        na.strings ="", stringsAsFactors= F) 

Aus dem Handbuch:

If sep = "" (the default for read.table) the separator is ‘white space’, that is one or more spaces, tabs, newlines or carriage returns.

Auch mit einem großen Daten-Datei Sie können data.table:::fread zu prüfen, schnell Daten zu lesen, gerade in eine data.table . Ich habe diese Funktion heute Morgen selbst benutzt. Es ist immer noch experimentell, aber ich finde es funktioniert wirklich sehr gut.

+0

Wie behandelt 'Fread' mehrere Leerzeichen ?? Dies war die erste Lesefunktion, die ich ausprobiert habe, aber für mich ist es aufgrund mehrerer Leerzeichen fehlgeschlagen. – Pawan

+0

@ user2412678 Hast du 'fread (..., sep =" ") versucht? Oder alternativ kannst du' fread (..., sep = "\ s") 'versuchen, aber ich weiß nicht, ob das funktioniert. Könntest du beides versuchen und zurückmelden, dann können wir die Antwort für "fread" aktualisieren, wenn einer von ihnen funktioniert. –

+4

'fread (..., sep =" ")' funktioniert nicht in 'fread', wir erhalten den folgenden Fehler, wenn wir dies verwenden -' Fehler in fread (file, sep = "",: 'sep' muss sei 'auto' oder ein einzelnes Zeichen ' 'fread (...., sep =" \ s ")' funktioniert nicht in 'fread', wir erhalten in diesem Fall folgenden Fehler' Fehler: '\ s' ist ein unrecognised escape in Zeichenkette startend "" \ s "' Allerdings funktioniert 'fread (..., sep =" ")', aber dies löst nicht das Problem von multiple space als Trennzeichen, es behandelt mehrere Leerzeichen als Spalte – Pawan

1

Wenn das Feld eine feste Breite hat, sollten Sie die Verwendung von read.fwf() in Betracht ziehen, die möglicherweise fehlende Werte besser behandelt.

Verwandte Themen