Usando read.zoo em vez de read.table e zoo ()?
-
26-09-2019 - |
Pergunta
Eu tenho um arquivo com muitas linhas desse tipo
2010-01-12 19:40 1021.00000 0.00001 1.00
2010-01-12 19:50 1031.00000 0.00000 -1.00
Para lê -lo como zoológico, eu uso
tmp <- read.table("myfile")
GOEMD <- zoo(tmp[,3], as.chron(paste(tmp[,1],tmp[,2]), format="%Y-%m-%d %H:%M"))
Isso funciona corretamente, mas eu gostaria de usar read.zoo()
em vez de.
eu tentei
f <- function(x) as.chron(paste(tmp[,1],tmp[,2]))
tmp <- read.zoo("myfile", index = 1:2, sep=" ", FUN = f)
e até especificar
colClasses= c("character","character","numeric","numeric","numeric")
Mas não funciona; Diz: Linha 136 (a que colei acima) não tem 14 elementos.
Eu também tentei:
tmp <- read.zoo("myfile", index = 1:2, sep=" ", FUN = as.chron)
Solução
- O erro de digitação
f
já foi apontado. - Também existem alguns recursos de
read.zoo
que você pode querer aproveitar. Em primeiro lugar, observe que se o valor doindex
O argumento é uma lista então as colunas referenciadas em cada componente dessa lista são passadas como argumentos separados paraFUN
. Observe também que umFUN2
argumento está disponível que é aplicado à saída deFUN
Para que possamos escrever de uma maneira compacta como esta:
Portanto, tente o seguinte:
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)
O acima foi escrito para ser independente, para que você possa copiá -lo literalmente para a área de transferência e colá -lo na sua sessão. Para usá -lo com seu arquivo Substitua textConnection(Lines)
com "myfile"
.
Outras dicas
Sua função f
tem que procurar tmp
. Você provavelmente pretendia:
f <- function(x) as.chron(paste(x[,1],x[,2]))
tmp <- read.zoo("myfile", index = 1:2, sep=" ", FUN = f)
Além disso, os dados de amostra que você postou parecem delimitados com guias, não delimitados por espaço, então você pode precisar: em vez disso:
tmp <- read.zoo("myfile", index = 1, sep="\t", FUN = as.chron)