2016-07-15 10 views
0

Ich habe seit ein paar Tagen nach einer Antwort auf diese Frage gesucht, habe die Antwort nicht gefunden, und dachte, dass es Zeit war, hierher zu kommen und selbst eine Frage zu stellen. Ich habe einen Datenrahmen, den ich einloggte, read.csv() mit dem as.is=TRUE Flag verwendend.Warum scheitert die Farbgebung bei Verwendung einer Teilmenge eines Datenrahmens?

x$night <- as.Date(x$night) 
x$gsub_version <- as.numeric(x$gsub_version) 
x$gsub_version <- x$gsub_version + 1 
head(x) 
night  filter  mag  mag_err gsub_version 
2013-10-08  B 17.67273 0.003226886   1 
2013-10-08  B 17.80228 0.003165991   2 

Um Platz zu sparen, habe ich abgeschnitten die Ergebnisse. Ich möchte die Daten mit filter=='V' und col=factor(x$gsub_version) plotten.

plot(mag ~ night, data=x[x$filter=="V",], ylim=c(21,17), col=factor(x$gsub_version)) 

Leider erzeugt diese diese plot mit falschen Farben nach einem bestimmten Punkt. Wenn ich den zusätzlichen Schritt einschließe, um einen dedizierten Datenrahmen für die Variable filter zu erstellen, sieht die Darstellung korrekt aus.

y <- x[x$filter=="V",] 
plot(mag ~ night, data=y, ylim=c(21,17), col=factor(y$gsub_version)) 

Und hier ist die new plot, die produziert wird. Das neue Diagramm verwendet korrekt die Werte gsub_version. Meine Frage ist zweifach: Was macht diese beiden Methoden anders, wenn man bedenkt, dass y aus der gleichen Teilmenge besteht, die für die erste Handlung verwendet wurde, und warum scheitert die erste Methode?

Vielen Dank, dass Sie sich die Zeit genommen haben, dies zu lesen.

+0

Scheint, als ob 'Faktor (x $ gsub_version)' nicht Teilmenge ist. Versuchen Sie die erste Zeile mit 'mit (x, factor (gsub_version [filter ==" V "]))' – MichaelChirico

+1

Es funktioniert nicht, weil Sie falsch sind, dass 'x $ gsub_version' ist das gleiche wie' y $ gsub_version'. Wenn Sie den Datenrahmen mit 'data = x [x $ filter ==" V "]] unterteilen, gilt diese Untermenge nur für die Formel. Sie haben einen _unfiltered_ Vektor von Farben mit 'x $ gsub_version' getrennt übergeben. – joran

+0

Vielen Dank! – luminessence

Antwort

0

Das Problem wird in den Kommentaren erwähnt. Addiert man diese Antwort zu zeigen, wie viel einfacher diese Art der Sache ist mit data.table:

library(data.table) 
setDT(x) #convert from data.frame to data.table 

x[filter == "V", plot(mag ~ night, ylim = c(21, 17), col = factor(gsub_version))] 

Sauber, transparent, und keiner der Verwirrung der Verfolgung von denen Vektors subsetted wo - alle von der subsetting erfolgt in das erste Argument von [].

+0

Funktioniert perfekt. Vielen Dank! – luminessence

Verwandte Themen