2010-08-02 8 views
22

Ich habe eine XTS-Zeitreihe in R des folgenden Formats und versuche, etwas zu verarbeiten, zu unterteilen und neu zu arrangieren, bevor ich es als CSV für die Arbeit in einem anderen Programm exportiere.Wie kann ich XTS zu data.frame ändern und Index in R behalten?

head(master_1) 
        S_1 
2010-03-03 00:00:00 2.8520 
2010-03-03 00:30:00 2.6945 
2010-03-03 01:00:00 2.5685 
2010-03-03 01:30:00 2.3800 
2010-03-03 02:00:00 2.2225 
2010-03-03 02:30:00 2.0650 

und

str(master_1) 
An ‘xts’ object from 2010-03-03 to 2010-05-25 08:30:00 containing: 
    Data: num [1:4000, 1] 2.85 2.69 2.57 2.38 2.22 ... 
- attr(*, "dimnames")=List of 2 
    ..$ : NULL 
    ..$ : chr "S_1" 
    Indexed by objects of class: [POSIXt,POSIXct] TZ: 
    Original class: 'zoo' 
    xts Attributes: 
List of 1 
$ dateFormat: chr "Date" 

Und ich würde das gerne ein data.frame konvertieren, damit ich es leichter manipulieren und dann in ein anderes Programm exportieren. Allerdings, wenn ich test1 <- as.data.frame(master_1) die test1 verwenden funktioniert der Index (dh die Daten und Zeiten) sichtbar,

head(test1) 
         S_1 
2010-03-03 00:00:00 2.8520 
2010-03-03 00:30:00 2.6945 
2010-03-03 01:00:00 2.5685 
2010-03-03 01:30:00 2.3800 
2010-03-03 02:00:00 2.2225 
2010-03-03 02:30:00 2.0650 

Aber der Index nicht angezeigt, die

str(test1) 
'data.frame': 4000 obs. of 1 variable: 
$ S_1: num 2.85 2.69 2.57 2.38 2.22 ... 

Und eine csv Schreiben write.csv(master_1, file="master_1.csv") nicht enthalten die Uhrzeit oder das Datum. Warum ist das und wie kann ich die Daten/Zeit-Daten als eine Spalte enthalten, so dass es in anderen R-Befehlen verwendet und ordnungsgemäß exportiert wird?

Danke für jede Hilfe.

Antwort

35

Das ist, weil die Daten in Ihrem data.frame rownames sind. Sie müssen sie zu einer separaten Spalte machen.

Versuchen Sie folgendes:

data.frame(date=index(master_1), coredata(master_1)) 
+0

Das ist richtig. Um die zweite Frage zu beantworten: "write.csv" enthält den Index nicht, da der Index ein xts * -Attribut * und kein rowname ist. Verwenden Sie stattdessen 'write.zoo'. –

+0

Danke Shane und Joshua, das hilft mir zu sehen, wo ich falsch gelaufen bin. – phrozenpenguin

+0

'' data.frame (date = index (master_1), Wert = coredata (master_1) [,]) '' um die Variable in einem Schritt umzubenennen. – PatrickT

1

Shane richtig ist. Sie könnten nach Index suchen (Ihre XTS). Hier ist ein reproduzierbares Beispiel.

library(xts) 
example(xts) 
x = head(sample.xts) 
datefield = index(x) 
newdf = data.frame(x,datefield) 

Dann sollten Sie in der Lage sein, es einfach zu einem CSV zu exportieren. Natürlich können Sie die Zeilen auch umbenennen.

+0

eh, danke Joshua, also ist es kein Rowname :) –

+0

Danke ran2 für das Beispiel. Ich kann auch roownames (x) verwenden, wenn x kein XTS-Objekt ist. – phrozenpenguin

-2

Eine elegante Form XTS zu data.frame zu ändern:

myDF <- as.data.frame(as.matrix(myXTS)) 
+0

Keine Notwendigkeit für 'as.matrix', und dies beantwortet nicht die Frage:" Das Schreiben einer csv 'write.csv (master_1, file =" master_1.csv ") beinhaltet weder die Uhrzeit noch das Datum. Warum ist das so?" und wie kann ich die Daten/Zeit-Daten als eine Spalte enthalten, so dass es in anderen R-Befehlen verwendet und ordnungsgemäß exportiert wird? " – GSee

8

dies ein wenig von einer Seitenleiste ist, aber die Funktion in Paket fortify(...)ggplot2 wird eine Vielzahl von Objekten zu Datenrahmen, geeignet für Verwendung in konvertiert ggplot(...), einschließlich xts Objekte.

library(xts) 
set.seed(1) # for reproducible example 
master_1 <- xts(rnorm(10,mean=2,sd=0.1),as.POSIXct("2010-03-03")+30*(0:9)) 

library(ggplot2) 
df <- fortify(master_1) 
head(df) 
#     Index master_1 
# 1 2010-03-03 00:00:00 1.937355 
# 2 2010-03-03 00:00:30 2.018364 
# 3 2010-03-03 00:01:00 1.916437 
# 4 2010-03-03 00:01:30 2.159528 
# 5 2010-03-03 00:02:00 2.032951 
# 6 2010-03-03 00:02:30 1.917953 

Also, wenn Sie bereits gggplot mit diesem ist eine einfache Möglichkeit, es zu tun. Beachten Sie, dass der Index in eine Spalte mit dem Namen Index (Hauptstadt "I") geht.

+0

Dank Ihrer Antwort habe ich es geschafft, xts in ggplot2 http://stackoverflow.com/questions/35215579/how-to-plot-xts-in-gplot2 zu plotten – aelwan

5

Seit 1.9.6 Sie können direkt von/in xts konvertieren, ohne die Indexklasse zu verlieren. So einfach wie:

as.data.table(master_1) 

Der Index wird als die erste Spalte in dem Ergebnis data.table hinzugefügt wird, behält es Index Date oder POSIXct Klassen.