Mit read.zoo statt read.table und Zoo ()?
-
26-09-2019 - |
Frage
Ich habe eine Datei mit vielen Zeilen dieser Art
2010-01-12 19:40 1021.00000 0.00001 1.00
2010-01-12 19:50 1031.00000 0.00000 -1.00
Um es als Zoo ich Gebrauch zu lesen
tmp <- read.table("myfile")
GOEMD <- zoo(tmp[,3], as.chron(paste(tmp[,1],tmp[,2]), format="%Y-%m-%d %H:%M"))
, die ordnungsgemäß funktioniert
Aber ich möchte stattdessen read.zoo()
verwenden.
Ich habe versucht,
f <- function(x) as.chron(paste(tmp[,1],tmp[,2]))
tmp <- read.zoo("myfile", index = 1:2, sep=" ", FUN = f)
und auch die Angabe
colClasses= c("character","character","numeric","numeric","numeric")
, aber es funktioniert nicht; es sagt: 136 Linie (die, die ich oben eingefügt haben) nicht 14 Elemente haben.
Ich habe auch versucht:
tmp <- read.zoo("myfile", index = 1:2, sep=" ", FUN = as.chron)
Lösung
- Der Tippfehler in
f
wurde bereits hingewiesen. - Es gibt auch ein paar Features von
read.zoo
, dass Sie nutzen vielleicht wünschen. Erstens, beachten Sie, dass, wenn der Wert desindex
Argument eine Liste ist dann die Spalten in jeder Komponente dieser Liste referenziert werden als separate ArgumenteFUN
geben. Beachten Sie auch, dass einFUN2
Argument zur Verfügung, die mit dem Ausgang desFUN
angelegt wird, so dass wir es in einer kompakten Art und Weise wie diese schreiben können:
So versuchen Sie dies:
library(zoo)
library(chron)
Lines <- "2010-01-12 19:40 1021.00000 0.00001 1.00
2010-01-12 19:50 1031.00000 0.00000 -1.00"
z <- read.zoo(textConnection(Lines), index = list(1, 2),
FUN = paste, FUN2 = as.chron)
wurde wie oben geschrieben selbst enthalten zu sein, so dass Sie nur in die Zwischenablage kopieren wörtlich könnten und es dann in Ihre R-Sitzung einfügen. Um es zu nutzen mit Ihrer Datei ersetzen textConnection(Lines)
mit "myfile"
.
Andere Tipps
Ihre Funktion f
hat für tmp
zu suchen. Sie haben wahrscheinlich gedacht:
f <- function(x) as.chron(paste(x[,1],x[,2]))
tmp <- read.zoo("myfile", index = 1:2, sep=" ", FUN = f)
Auch die Abtastdaten Sie auf dem Laufenden sieht aus wie es die Tabula begrenzt, nicht durch Leerzeichen getrennte, so dass Sie auf diese stattdessen brauchen können:
tmp <- read.zoo("myfile", index = 1, sep="\t", FUN = as.chron)