2016-07-03 10 views
1

Ich habe eine CSV in folgendem Format:Lesen CSV in R mit Zoo

TICKER,PER,DATE,TIME,CLOSE 
SYMBOL,1,20160104,1002,14180.0000000 
SYMBOL,1,20160104,1003,14241.0000000 

Ich möchte es in einer Zeitreihe lesen:

f <- function(a, b) { 
    c <- paste(a, b) 
    return(strptime(c, format = "%Y%m%d %H%M")) 
} 
d <- read.zoo("test.csv", FUN = f, index.column = list("DATE", "TIME")) 

Und was bekomme ich ist index does not match data. Warum?

+1

Mögliche Duplikat [Lesen csv mit Datum und Uhrzeit] (http: // Stackoverflow .com/questions/9372211/lesen-csv-mit-datum-und-zeit) – theArun

Antwort

1

Sie müssen header = TRUE und sep = "," angeben, da sie für read.zoo nicht die Standardeinstellungen sind wie sie für read.csv sind.

d <- read.zoo(text="TICKER,PER,DATE,TIME,CLOSE 
SYMBOL,1,20160104,1002,14180.0000000 
SYMBOL,1,20160104,1003,14241.0000000", 
    FUN = f, index.column = list("DATE", "TIME"), 
    header=TRUE, sep=",") 
d 
#      TICKER PER CLOSE 
# 2016-01-04 10:02:00 SYMBOL 1 14180 
# 2016-01-04 10:03:00 SYMBOL 1 14241 
+2

Beachten Sie, dass der Datenteil davon eine Zeichenmatrix ist, die unwahrscheinlich ist, was Sie wollen. –

3

Zeichen und Ziffern Spalten können nicht beide einen Teil der Zeitreihendaten sein, da der Datenteil eines Zoo-Objekt ist eine Matrix (und eine Matrix müssen alle numerisch, alle Zeichen oder alle anderen Typ sein); Es kann jedoch vermieden werden, die Funktion f durch Angabe von format= und tz= zu spezifizieren. Außerdem müssen wir angeben, dass eine Kopfzeile vorhanden ist (header=) und dass Felder durch das Zeichen "," getrennt sind (sep=).

(. Im Folgenden text = Lines für reproducibliity aber in Wirklichkeit verwendet haben, ersetzen, dass mit "test.csv")

Lines <- "TICKER,PER,DATE,TIME,CLOSE 
SYMBOL,1,20160104,1002,14180.0000000 
SYMBOL,1,20160104,1003,14241.0000000" 

library(zoo) 

read.zoo(text = Lines, header = TRUE, sep = ",", index = c("DATE", "TIME"), 
    split = "TICKER", format = "%Y%m%d %H%M", tz = "") 

geben:

    PER CLOSE 
2016-01-04 10:02:00 1 14180 
2016-01-04 10:03:00 1 14241 

Hinweis: Wenn Sie möchten, dass Ihre Funktion verwenden f trotzdem weglassen format und tz und verwenden:

read.zoo(text = Lines, header = TRUE, sep = ",", index = c("DATE", "TIME"), 
    split = "TICKER", FUN = f) 

Dies würde auch funktionieren, das heißt es in einem Datenrahmen gelesen und dann den Datenrahmen in einem Zoo Objekt lesen:

DF <- read.csv(text = Lines) # read.csv defaults to header=TRUE, sep="," 
read.zoo(DF, index = c("DATE", "TIME"), split = "TICKER", FUN = f)