2010-11-18 11 views
2

Ich habe eine Datei mit vielen Zeilen dieser ArtVerwendung von read.zoo anstelle von read.table und zoo()?

2010-01-12 19:40 1021.00000 0.00001  1.00 
2010-01-12 19:50 1031.00000 0.00000  -1.00 

Um es zu lesen, wie Zoo I

tmp <- read.table("myfile") 
GOEMD <- zoo(tmp[,3], as.chron(paste(tmp[,1],tmp[,2]), format="%Y-%m-%d %H:%M")) 

verwenden, die richtig funktioniert Aber ich möchte read.zoo() stattdessen 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 sogar

colClasses= c("character","character","numeric","numeric","numeric") 

spezifiziert, aber es funktioniert nicht; es sagt: Zeile 136 (die ich oben eingefügt habe) hat keine 14 Elemente.

habe ich auch versucht:

tmp <- read.zoo("myfile", index = 1:2, sep=" ", FUN = as.chron) 

Antwort

3
  1. Der Tippfehler in f wurde bereits darauf hingewiesen.
  2. Auch gibt es ein paar Funktionen von read.zoo, die Sie vielleicht nutzen möchten. Beachten Sie zunächst, dass, wenn der Wert des index-Arguments eine Liste ist, die Spalten, auf die in jeder Komponente dieser Liste verwiesen wird, als separate Argumente an FUN übergeben werden. Beachten Sie auch, dass ein FUN2 Argument zur Verfügung, die mit dem Ausgang der FUN angelegt wird, so können wir es in einer kompakten Art und Weise wie folgt schreiben:

So dies versuchen:

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) 

Die oben wurde geschrieben Sei eigenständig, also kopiere es einfach wörtlich in die Zwischenablage und füge es dann in deine R-Sitzung ein. Um es mit Ihrer Datei zu verwenden, ersetzen Sie textConnection(Lines) durch "myfile".

+0

Hallo. Es klappt. Aber wie kann ich nur die ersten 3 Zeilen lesen, ich meine in der gleichen Zeile. Wenn ich eine Variable habe, schreibe ich myvar [1: 3], aber wie kann ich das direkt mit einem Dateinamen machen ?. Prost – skan

+0

Ich fand den Weg: read.zoo ("myfile.txt", colClasses = c ("Zeichen", "Zeichen", "numerisch", "numerisch", "NULL"), Index = Liste (1, 2) , FUN = einfügen, FUN2 = as.chron) – skan

2

Ihre Funktion f für tmp suchen hat. 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 Sie die Beispieldaten Aussehen geschrieben, wie es ist Tabula begrenzt, nicht durch Leerzeichen getrennte, so dass Sie auf diese stattdessen benötigen:

tmp <- read.zoo("myfile", index = 1, sep="\t", FUN = as.chron) 
+0

Es tut mir leid, ein Tippfehler. Wie auch immer, es funktioniert nicht für mich. – skan

Verwandte Themen