Frage

Ich versuche, Zeitreihen aus CSV-Datei und speichern Sie sie zu lesen, wie xts Lage sein, sie mit quantmod zu verarbeiten. Das Problem ist, dass numerische Werte werden nicht analysiert.

CSV-Datei:

name;amount;datetime
test1;3;2010-09-23 19:00:00.057
test2;9;2010-09-23 19:00:00.073

R Code:

library(xts)
ColClasses = c("character", "numeric", "character")
Data <- read.zoo("c:\\dat\\test2.csv", index.column = 3, sep = ";", header = TRUE, FUN = as.POSIXct, colClasses = ColClasses)
as.xts(Data)

Ergebnis:

                    name    amount
2010-09-23 19:00:00 "test1" "3"   
2010-09-23 19:00:00 "test2" "9"   

Siehe Menge Spalte enthält Datenzeichen aber erwartet numerisch zu sein. Was ist falsch mit meinem Code?

War es hilfreich?

Lösung

Die interne Datenstruktur sowohl zoo und xts ist matrix, so dass Sie nicht Datentypen mischen.


Lesen Sie einfach in den Daten mit read.table:

Data <- read.table("file.csv", sep=";", header=TRUE, colClasses=ColClasses)

ich feststellen, dass Ihre Daten haben Millisekunden, so dass Sie in xts::align.time interessiert sein könnten. Dieser Code wird Data nehmen und ein Objekt mit einer Spalte für jeden "name" von Sekunden erstellen.

NewData <- do.call( merge, lapply( split(Data,Data$name), function(x) {
  align.time( xts(x[,"amount"],as.POSIXct(x[,"datetime"])), n=1 )
}) )

Wenn Sie Objekte test1 und test2 im globalen Umfeld schaffen möchten, können Sie so etwas tun:

lapply( split(Data,Data$name), function(x) {
  assign(x[,"name"], xts(x[,"amount"],as.POSIXct(x[,"datetime"])),envir=.GlobalEnv)
})

Andere Tipps

Sie können nicht numerisch und Zeichendaten in einem Zoo oder xts Objekt mischen; jedoch, wenn der Namensspalte ist nicht als Zeitreihendaten bestimmt, sondern soll zwischen mehreren Zeitreihen, eine für test1, eine für test2 unterscheiden, usw., dann können Sie auf Spalte geteilt 1 Split mit 1 = solche Spaltung verursachen wie in dem folgenden Code dargestellt. Sicherstellen, dass die digits.secs setzen oder sonst werden Sie nicht die Unter Sekunden auf Ausgang sehen (obwohl sie auf jeden Fall da sein wird):

options(digits.secs = 3)
z <- read.zoo("myfile.csv", sep = ";", split = 1, index = 3, header = TRUE, tz = "")
x <- as.xts(z)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top