Plotten Zeitreihen in R
Arbeite ich mit Daten, 1. zwei Spalten sind Datumsangaben, 3. Spalte symbol, und 4. und 5. Spalten sind die Preise.
Also, ich erstellte eine Teilmenge der Daten wie folgt:
test.sub<-subset(test,V3=="GOOG",select=c(V1,V4)
und dann versuche ich zu Plotten Zeitreihen Diagramm mit den folgenden
as.ts(test.sub)
plot(test.sub)
gut, es gibt mir eine scatter-plot - nicht das was ich suchte.
so, ich habe versucht plot(test.sub[1],test.sub[2])
und jetzt bekomme ich die folgende Fehlermeldung:
Error in xy.coords(x, y, xlabel, ylabel, log) :
'x' and 'y' lengths differ
Stellen Sie sicher, dass die keine. Zeilen waren die gleichen, ich lief nrow(test.sub[1])
und nrow(test.sub[2])
und Sie beide zurück gleiche Zeilen, so als Neuling auf R, ich bin nicht sicher, was die Lösung ist.
Ich lief auch plot.ts(test.sub)
und das funktioniert, aber es hat nicht zeigen mir die Daten auf der x-Achse, die es tun, mit plot(test.sub)
- und das ist das, was ich sehen möchte.
test.sub[1]
V1
1107 2011-Aug-24
1206 2011-Aug-25
1307 2011-Aug-26
1408 2011-Aug-29
1510 2011-Aug-30
1613 2011-Aug-31
1718 2011-Sep-01
1823 2011-Sep-02
1929 2011-Sep-06
2035 2011-Sep-07
2143 2011-Sep-08
2251 2011-Sep-09
2359 2011-Sep-13
2470 2011-Sep-14
2581 2011-Sep-15
2692 2011-Sep-16
2785 2011-Sep-19
2869 2011-Sep-20
2965 2011-Sep-21
3062 2011-Sep-22
3160 2011-Sep-23
3258 2011-Sep-26
3356 2011-Sep-27
3455 2011-Sep-28
3555 2011-Sep-29
3655 2011-Sep-30
3755 2011-Oct-03
3856 2011-Oct-04
3957 2011-Oct-05
4059 2011-Oct-06
4164 2011-Oct-07
4269 2011-Oct-10
4374 2011-Oct-11
4479 2011-Oct-12
4584 2011-Oct-13
4689 2011-Oct-14
str(test.sub)
'data.frame': 35 obs. of 2 variables:
$ V1:Class 'Date' num [1:35] NA NA NA NA NA NA NA NA NA NA ...
$ V4: num 0.475 0.452 0.423 0.418 0.403 ...
head(test.sub) V1 V4
1212 <NA> 0.474697
1313 <NA> 0.451907
1414 <NA> 0.423184
1516 <NA> 0.417709
1620 <NA> 0.402966
1725 <NA> 0.414264
Nun, dass dies funktioniert, würde ich gern noch eine 3. variable plot einer 3d-Grafik - irgendwelche Vorschläge, wie ich das tun kann. thx!!!
nur ein line-graph mit der x-Achse die Datumsangaben in Spalte 1 und die y-Achse die Preise in die 4. Spalte
Nur dann nicht
plot(test.sub,type="l")
.es gibt mir immer noch scatter-Punkte als mit
plot(test.sub)
.auch, als Anfänger, bin ich daran interessiert, zu verstehen, warum bekomme ich die
Error in xy.coords
wenn die Anzahl der Zeilen in beiden Spalten sind die gleichen
InformationsquelleAutor itcplpl | 2011-10-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
So, ich denke, es gibt ein paar Dinge hier, die sind der Rede Wert durch:
zunächst einige Beispiel-Daten:
Beachten Sie zunächst, dass test und test.sub Daten-frames, so fordert wie
test.sub[1]
nicht wirklich "bedeuten" etwas zu R.** Es ist mehr R-ish zu schreibentest.sub[,1]
aufgrund der Konsistenz mit anderen R-Strukturen. Vergleicht man die Ergebnisse derstr(test.sub[1])
undstr(test.sub[,1])
du wirst sehen, dass R Sie behandelt etwas anders.Du gesagt hast eingegeben:
Ich denke, Sie haben umfangreiche Erfahrung mit irgendeiner Art von OO-Sprache; und während R hat einige OO-Geschmack, um es, es gilt nicht hier. Anstatt die Umwandlung test.sub sowas von Klasse ts, dies nur tut, die transformation und wirft es Weg, dann bewegt sich auf der plot-Daten-frame mit dem Sie angefangen haben. Es ist leicht zu beheben, aber:
Aber, dies ist wahrscheinlich nicht, was Sie gesucht haben. Vielmehr R erzeugt eine Zeitreihe, die zwei Variablen mit der Bezeichnung "Ende" (das ist das Datum nun dazu gezwungen eine ganze Zahl) und "EndP". Komisches Geschäft, wie das ist Teil der Grund, warum time-series-Pakete wie zoo und xts gefangen haben, so werde ich ausführlich Ihnen stattdessen ein wenig weiter nach unten.
(Leider, zu meinem besten Verständnis, R nicht halten Datumsstempel mit seiner Standard-ts-Klasse, die Wahl stattdessen halten Sie start-und Enddatum sowie eine Frequenz. Weitere Allgemeine Zeit-Serie arbeiten, ist dies nur selten flexibel genug)
Könnten Sie vielleicht bekommen, was Sie wollte, durch Eingabe
statt
da ersteres läuft in Schwierigkeiten, da Sie auf der Durchreise sind zwei sub-Daten-frames anstelle von zwei Vektoren (auch wenn es so aussieht, wie Sie sein würde).*
Sowieso, mit xts (und ähnlich für zoo):
Hoffe, etwas davon hilft, und sorry für die inline-code nicht als solche identifiziert: noch immer verwendet, um stack-überlauf.
Michael
**In Wirklichkeit, haben Sie Zugriff auf die Listen, die verwendet werden, um die Struktur einer Daten-frame intern, aber das ist mehr ein code nuance als etwas, das lohnt sich auf.
***Die nitty-gritty ist, wenn Sie übergeben
plot(test.sub[1], test.sub[2])
zu R ist, löst die Methodeplot.data.frame
nimmt einem einzelnen Daten-frame und versucht zu interpretieren, die zweite Daten-frame als zusätzliche plot-parameter, die bekommt fehlinterpretiert irgendwo hinunter die Linie, indem Sie Ihre Fehler.xtemp<-xts(test.sub[,2],test.sub[,1]) Error in xts(test.sub[, 2], test.sub[, 1]) : order.by requires an appropriate time-based object
ich überprüfttest.sub[1]
und es zeigt die Datumsangaben im format 'yyyy-mmm-dd', so ist es eine Zeit-basierte Objekt...habe ich etwas verpasstWenn es zeigt die Termine als "yyyy-mm-dd" es ist nicht unbedingt eine Zeit-basierte Objekt: je nach Datenquelle kann es nur ein Zeichen, dass Sie offensichtlich ein Datum, aber R nicht weiß, dass. Ein Termin ist ein spezieller Datentyp in R...Versuchen, das einwickeln test.sub[,1] mit.Date() nimmt ein optionales format= argument wenn Ihr nicht nach der Norm. Für Sie, es klingt wie als.Datum(test.sub[,1], format = "YYYY-mm-dd").
versucht, aber kein Glück, hier ist, was es gibt -
as.Date(test.sub[,1],format="YYYY-mm-dd") [1] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA [26] NA NA NA NA NA NA NA NA NA NA NA
. dies ist eine Probe meiner Daten im test.sub4689 2011-Oct-14 0.2460010 7.18000 1.000000
mit dem das Datum für die V1Ich glaube mweylandt nur gab Sie das falsche format für das format-argument (Ironie!). Versuchen
format = '%Y-%m-%d'
statt.zurückgegeben NA ' s genauso 🙁 das ist, was ich habe
as.Date(test.sub[,1],format='%Y-%m-%d') [1] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA [26] NA NA NA NA NA NA NA NA NA NA NA
InformationsquelleAutor mweylandt
Dem Grund, dass man den Fehler über die verschiedenen
x
undy
Längen ist sofort ersichtlich, wenn Sie eine traceback-sofort nach dem auslösen des Fehlers:Die Probleme in Ihrem Aufruf sind vielfältig. Zunächst, wie erwähnt von @mweylandt
test.sub[1]
ist ein data-frame mit der einzelnen Komponente, nicht ein Vektor bestehend aus den Inhalten der ersten Komponente vontest.sub
.Aus der traceback -, sehen wir, dass die
plot.data.frame
- Methode aufgerufen wurde. R ist ganz glücklich, zeichnen ein Daten-frame, solange es mindestens zwei Spalten. R nahm Sie beim Wort und übergebentest.sub[1]
(als Daten.frame) aufplot()
-test.sub[2]
bekommt nie einen Blick in.test.sub[1]
ist schließlich anxy.coords()
die korrekt informiert Sie, dass Sie viele Zeilen fürx
aber 0 Zeilen füry
weiltest.sub[1]
enthält nur eine einzelne Komponente.Es würde gearbeitet haben, wenn Sie getan hatte
plot(test.sub[,1], test.sub[,2], type = "l")
oder benutzt die Formel-Schnittstelle, um den Namen der Variablenplot(V4 ~ V1, data = test.sub, type = "l")
wie ich in meiner anderen Antwort.InformationsquelleAutor Gavin Simpson
Sicherlich ist es leichter die Formel zu verwenden-Schnittstelle:
Ich arbeite viel mit Zeit-Serien Daten vom Typ und selten, wenn überhaupt, keine Notwendigkeit für die
"ts"
Klasse von Objekten. Pakete zoo und xts sind sehr nützlich, aber wenn alles, was Sie tun möchten, ist eine Darstellung der Daten, i) bekommen, die Datum/Uhrzeit Informationen korrekt formatiert/set-up als"Date"
oder"POSIXt"
class-Objekt, und dann ii) einfach zeichnen Sie es mit standard-Grafiken undtype = "l"
(odertype = "b"
odertype = "o"
wenn Sie sehen möchten der beobachtungsdauer).Sys.Date()
wie ich bin den Umgang mit historischen Daten. Geschrieben ich der Fehler bin ich immer mit Datum..einen Vorschlag auf, der fix wäre sehr hilfreichWie über Sie show uns, wie deine Daten Aussehen? Wenn Sie mir zeigen, das format, das ich werde Ihnen zeigen, wie zu konvertieren, die in etwas R Lesen kann.
hört sich gut an. Ich habe soeben die original-Beitrag mit den aktuellen Daten
in(test.sub-sub-V1 <- wie.Datum(V1, format = "Y%-%b-%d")) sollte es tun. Sehen
?strftime
details zu den format-codes.vielen Dank für die Zeiger auf strftime. das bisschen gearbeitet, aber bei mir lief der plot, es gibt mir eine Fehlermeldung...hier was lief ich
test.sub<-within(test.sub, V1<-as.Date(V1, format = "%Y-%b-%d")) > xtemp<-xts(test.sub[,2],test.sub[,1]) > plot(xtemp) Error in if (on == "years") { : missing value where TRUE/FALSE needed
InformationsquelleAutor Gavin Simpson