2010-11-18 49 views
2

Je dispose d'un fichier avec plusieurs lignes de ce genreUtiliser read.zoo au lieu de read.table et zoo()?

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

Afin de le lire comme zoo j'utilise

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

qui fonctionne correctement Mais je voudrais utiliser read.zoo() à la place.

J'ai essayé

f <- function(x) as.chron(paste(tmp[,1],tmp[,2])) 
tmp <- read.zoo("myfile", index = 1:2, sep=" ", FUN = f) 

et même spécification

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

mais il ne fonctionne pas; il est dit: ligne 136 (celui que j'ai collé ci-dessus) n'a pas 14 éléments.

J'ai aussi essayé:

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

Répondre

3
  1. La faute de frappe dans f a déjà été souligné.
  2. Vous pouvez également profiter de quelques fonctionnalités de read.zoo. Tout d'abord, notez que si la valeur de l'argument index est une liste, les colonnes référencées dans chaque composant de cette liste sont transmises en tant qu'arguments distincts à FUN. Notez également que l'argument FUN2 est disponible qui est appliquée à la sortie de FUN afin que nous puissions l'écrire de façon compacte comme ceci:

Essayez donc ceci:

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) 

Ce qui précède a été écrit à Soyez autonome de sorte que vous pourriez simplement le copier mot pour mot dans le presse-papiers, puis le coller dans votre session R. Pour l'utiliser avec votre fichier, remplacez textConnection(Lines) par "myfile".

+0

Salut. Ça marche. Mais comment puis-je lire seulement les 3 premières lignes, je veux dire dans la même ligne. Si j'ai une variable, j'écris myvar [1: 3], mais comment puis-je le faire directement avec un nom de fichier? acclamations – skan

+0

J'ai trouvé le chemin: read.zoo ("myfile.txt", colClasses = c ("caractère", "caractère", "numérique", "numérique", "NULL"), index = liste (1, 2) , FUN = coller, FUN2 = as.chron) – skan

2

Votre fonction f doit rechercher tmp. Vous avez probablement l'intention:

f <- function(x) as.chron(paste(x[,1],x[,2])) 
tmp <- read.zoo("myfile", index = 1:2, sep=" ", FUN = f) 

En outre, les données de l'échantillon que vous avez affichée ressemble il est délimité par des tabulations, non délimité l'espace, de sorte que vous devrez peut-être ceci:

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

Je suis désolé, une faute de frappe. En tout cas, ça ne marche pas pour moi. – skan