En utilisant read.zoo au lieu de read.table et le zoo ()?
-
26-09-2019 - |
Question
J'ai un fichier avec plusieurs lignes de ce genre
2010-01-12 19:40 1021.00000 0.00001 1.00
2010-01-12 19:50 1031.00000 0.00000 -1.00
Pour 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 en spécifiant
colClasses= c("character","character","numeric","numeric","numeric")
mais il ne fonctionne pas; ça dit: la ligne 136 (celle 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)
La solution
- La faute de frappe dans
f
était déjà fait remarquer. - Il y a aussi quelques fonctionnalités de
read.zoo
que vous voudrez peut-être profiter. Tout d'abord, notez que si la valeur de l'argumentindex
est une liste alors les colonnes référencées dans chaque composant de cette liste sont passés comme arguments séparés pourFUN
. Notez également qu'un argumentFUN2
est disponible qui est appliquée à la sortie deFUN
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 pour être autonome pour que vous puissiez simplement copier textuellement le presse-papiers, puis collez-le dans votre session R. Pour l'utiliser avec votre fichier remplacer textConnection(Lines)
avec "myfile"
.
Autres conseils
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)