Ich besitze eine XTS-Zeitserie in R des folgenden Formats und versuche, vor dem Exportieren als CSV-Datei für die Arbeit in einem anderen Programm etwas zu verarbeiten, zu unterteilen und neu anzuordnen.
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 möchte dies in ein data.frame konvertieren, damit ich es einfacher manipulieren und dann in ein anderes Programm exportieren kann. Wenn ich jedoch test1 <- as.data.frame(master_1)
verwende, ist im Test1 der Index (d. H. Datum und Uhrzeit) 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 wird nicht angezeigt,
str(test1)
'data.frame': 4000 obs. of 1 variable:
$ S_1: num 2.85 2.69 2.57 2.38 2.22 ...
Beim Schreiben einer CSV-Datei write.csv(master_1, file="master_1.csv")
werden Uhrzeit und Datum nicht berücksichtigt. Warum ist das so und wie kann ich die Daten/Zeitdaten als Spalte einfügen, damit sie in anderen R-Befehlen verwendet und ordnungsgemäß exportiert werden?
Danke für jede Hilfe.
Das liegt daran, dass die Datumsangaben in Ihrem data.frame als Rownames bezeichnet werden. Sie müssen eine eigene Spalte erstellen.
Versuche dies:
data.frame(date=index(master_1), coredata(master_1))
Dies ist ein bisschen wie eine Seitenleiste, aber die Funktion fortify(...)
im Paket ggplot2
konvertiert eine Vielzahl von Objekten in Datenrahmen, die für die Verwendung in ggplot(...)
geeignet sind, einschließlich xts
-Objekten.
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
Wenn Sie gggplot
bereits verwenden, können Sie dies auf einfache Weise tun. Beachten Sie, dass der Index in eine Spalte namens Index
(Großbuchstabe "I") geht.
Da 1.9.6
Sie direkt von/nach xts
konvertieren können, ohne die Indexklasse zu verlieren. So einfach wie:
as.data.table(master_1)
Der Index wird als erste Spalte im Ergebnis data.table
hinzugefügt. Er behält die Indexvariablen Date
oder POSIXct
bei.
Shane hat recht. Sie suchen möglicherweise nach Index (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 es einfach in eine CSV exportieren können. Natürlich können Sie auch die Zeilen umbenennen.
Sie können ein xts-Objekt in einen data.frame konvertieren, der den Index als Spalte "Index" mit Zoo::fortify.Zoo()
enthält.
Sie brauchen kein ggplot2, aber das funktioniert auch, wenn Sie xts (oder Zoo) und ggplot2 geladen haben.
Zum Beispiel:
library(xts)
data(sample_matrix)
x <- as.xts(sample_matrix, dateFormat = "Date")
my_df <- fortify.Zoo(x)
head(my_df)
# Index Open High Low Close
# 1 2007-01-02 50.03978 50.11778 49.95041 50.11778
# 2 2007-01-03 50.23050 50.42188 50.23050 50.39767
# 3 2007-01-04 50.42096 50.42096 50.26414 50.33236
# 4 2007-01-05 50.37347 50.37347 50.22103 50.33459
# 5 2007-01-06 50.24433 50.24433 50.11121 50.18112
# 6 2007-01-07 50.13211 50.21561 49.99185 49.99185
str(my_df)
# 'data.frame': 180 obs. of 5 variables:
# $ Index: Date, format: "2007-01-02" "2007-01-03" ...
# $ Open : num 50 50.2 50.4 50.4 50.2 ...
# $ High : num 50.1 50.4 50.4 50.4 50.2 ...
# $ Low : num 50 50.2 50.3 50.2 50.1 ...
# $ Close: num 50.1 50.4 50.3 50.3 50.2 ...