2016-11-24 2 views
0

ich meine CSV-Datei mit einfachen Laden:R nach mit fread falscher Anzahl von Dimensionen Fehlern ersetzt read.csv erscheint

baseData <- read.csv(datafile) 

aber wie ich größere Datenmenge zu ladende habe ich ziehe nach data.table package

baseData <- fread(input = paste("zcat < ", datafile, sep="")) 

alles scheint gut zu funktionieren, und die Daten viel schneller lädt, aber wenn ich drücken Sie die folgende Zeile:

d <- baseData[baseData$some_prop==0,] 
d <- d[!is.na(d[,"col"]) & (d[,"col"] == 0 | d[,"col"] == 1),] 

Ich bekomme Fehler für incorrect number of dimensions

bei der Verwendung read.csv alles funktioniert gut. Irgendeine Idee, was kann falsch gehen?

+0

Wenn dvName Ihre Spalte ist, dann sollte es in Anführungszeichen d [, "dvName"] sein –

+0

danke @Arunkumarmashesh, aber es war eine Variable - ich habe die Frage bearbeitet. –

+0

Convert col in numerische und versuchen Sie es einmal hoffe, es könnte –

Antwort

1

In einer data.table soll der j Teil der Teilmenge einen neuen Wert zurückgeben und die Spaltennamen sollten nicht in Anführungszeichen gesetzt werden oder Sie erhalten genau diesen Wert zurück.

Beispiel:

>d<-data.table(A=1:5,B=5:10) 
> d[,A] 
[1] 1 2 3 4 5 1 
> d[,B] 
[1] 5 6 7 8 9 10 
> d[,"B"] 
[1] "B" 

Also für Sie besonderen Fall, um die Spaltennamen, die Anführungszeichen zu entfernen sollte den Fehler beheben.

Wenn Ihr Code ziemlich lang ist und data.frame Methoden verwenden, können Sie setDF(d) verwenden, um es vor dem Refactoring so wie es ist zu arbeiten.

vollständig, entstehen die Fehler, weil Ihre logische Aussage der Länge 1 ("col" == whatever einen Wert nur TRUE oder FALSE zurückkehren), nicht die Anzahl der Zeilen Ihres data.table Objekts entspricht.

+1

danke! Ich denke, ich bin jetzt viel näher! Nach dem Austesten habe ich die folgende Zeile gefunden: d <- d [, colSums (is.na (d))

+0

@GuyDubrovski Wahrscheinlich haben data.tables ein nettes Feature, um sich durch Verweis zu aktualisieren, also wenn man diese Art der Neuzuweisung wie in dat.frame macht, wird es schlecht :) – Tensibai

+0

Ich habe auch versucht, setDT (d) vor allen Manipulationen, um ein Refactoring zu verhindern, aber leider ist das Gleiche passiert:/ –

Verwandte Themen