2016-12-19 5 views
2

Ich versuche, ein xts aus einer CSV-Datei zu generieren. Die Ausgabe sieht als einfacher Vektor in Ordnung aus, d. H. Date und Value Spalten sind Zeichen bzw. numerisch.Erstellen XTS-Objekt von CSV

Allerdings, wenn ich es in ein xts machen will, scheint die Ausgabe zweifelhaft Ich frage mich, was ist die Ausgabe auf der am weitesten links Spalte auf dem XTS?

> test <- read.csv("Test.csv", header = TRUE, as.is = TRUE) 
> test 
    Date Value 
1 1/12/2014 1.5 
2 2/12/2014 0.9 
3 1/12/2015 -0.1 
4 2/12/2015 -0.3 
5 1/12/2016 -0.7 
6 2/12/2016 0.2 
7 7/12/2016 -1.0 
8 8/12/2016 -0.2 
9 9/12/2016 -1.1 
> xts(test, order.by = as.POSIXct(test$Date), format = "%d/%m/%Y") 
      Date  Value 
0001-12-20 "1/12/2014" " 1.5" 
0001-12-20 "1/12/2015" "-0.1" 
0001-12-20 "1/12/2016" "-0.7" 
0002-12-20 "2/12/2014" " 0.9" 
0002-12-20 "2/12/2015" "-0.3" 
0002-12-20 "2/12/2016" " 0.2" 
0007-12-20 "7/12/2016" "-1.0" 
0008-12-20 "8/12/2016" "-0.2" 
0009-12-20 "9/12/2016" "-1.1" 

Ich würde einfach wie ein xts von Date, anstatt das Geheimnis Spalte auf der linken Seite bestellt einzustellen. Ich habe as.Date für die xts versucht, aber habe die gleichen Ergebnisse.

+0

Die Spalte auf der linken Seite ist in Wirklichkeit keine Spalte, sondern die Namen der Zeilen (oder besser 'row.names' in R). Sie können [es nicht wirklich loswerden, außer die Namen ändern, die normalerweise angezeigt werden] (http://stackoverflow.com/questions/24428051/removing-display-of-r-row-names-from-data-frame). Durch die Ich denke, Sie verwenden das Paket "xts", also sollten Sie vielleicht hinzufügen, dass Sie es in Ihrer Frage verwenden, damit wir schneller erkennen können, worauf Sie sich beziehen. –

+0

Probieren Sie dies aus "testXts = xts (test [, - 1], order.by = as.Date (test [, 1], format = "% d /% m /% Y")). Beachten Sie, dass der Tippfehler in Ihrer Anweisung 'format' der Parameter' as.Date' sein sollte und nicht 'xts' Funktion – OdeToMyFiddle

+0

Ahhh das erklärt viel - danke! –

Antwort

1

Das Problem scheint zweifach zu sein. Erstens, in einem Ihrer Anrufe ist eine falsche Klammer vorhanden. zwei, die linke Spalte ist der Index, was die Date Spalte überflüssig macht.

df <- read.table(text=" 
    Date Value 
    1/12/2014 1.5 
    2/12/2014 0.9 
    1/12/2015 -0.1 
    2/12/2015 -0.3 
    1/12/2016 -0.7 
    2/12/2016 0.2 
    7/12/2016 -1.0 
    8/12/2016 -0.2 
    9/12/2016 -1.1", 
    header=TRUE) 

df$Date <- as.Date(df$Date, format="%d/%m/%Y") 

library(xts) 
xts(df[-1], order.by=df[,1]) 

#   Value 
# 2014-12-01 1.5 
# 2014-12-02 0.9 
# 2015-12-01 -0.1 
# 2015-12-02 -0.3 
# 2016-12-01 -0.7 
# 2016-12-02 0.2 
# 2016-12-07 -1.0 
# 2016-12-08 -0.2 
# 2016-12-09 -1.1 
2

Ich empfehle Ihnen read.zoo verwenden, um die Daten aus CSV zu lesen, konvertieren dann das Ergebnis mit as.xts XTS.

Text <- "Date,Value 
1/12/2014,1.5 
2/12/2014,0.9 
1/12/2015,-0.1 
2/12/2015,-0.3 
1/12/2016,-0.7 
2/12/2016,0.2 
7/12/2016,-1.0 
8/12/2016,-0.2 
9/12/2016,-1.1" 
z <- read.zoo(text=Text, sep=",", header=TRUE, format="%m/%d/%Y", drop=FALSE) 
x <- as.xts(z) 
#   Value 
# 2014-01-12 1.5 
# 2014-02-12 0.9 
# 2015-01-12 -0.1 
# 2015-02-12 -0.3 
# 2016-01-12 -0.7 
# 2016-02-12 0.2 
# 2016-07-12 -1.0 
# 2016-08-12 -0.2 
# 2016-09-12 -1.1 

Beachten Sie, dass text = Text von Ihrem eigentlichen Aufruf weglassen müssen, und ersetzen Sie es mit file = "your_file_name.csv".

Verwandte Themen