Utilizzando read.zoo invece di read.table e zoo ()?
-
26-09-2019 - |
Domanda
Ho un file con molte righe di questo tipo
2010-01-12 19:40 1021.00000 0.00001 1.00
2010-01-12 19:50 1031.00000 0.00000 -1.00
Al fine di leggerlo come l'uso zoo I
tmp <- read.table("myfile")
GOEMD <- zoo(tmp[,3], as.chron(paste(tmp[,1],tmp[,2]), format="%Y-%m-%d %H:%M"))
che funziona correttamente
Ma mi piacerebbe usare read.zoo()
posto.
Ho provato
f <- function(x) as.chron(paste(tmp[,1],tmp[,2]))
tmp <- read.zoo("myfile", index = 1:2, sep=" ", FUN = f)
e anche specificando
colClasses= c("character","character","numeric","numeric","numeric")
ma non funziona; dice: linea 136 (quello che ho incollato sopra) non ha 14 elementi.
Ho anche provato:
tmp <- read.zoo("myfile", index = 1:2, sep=" ", FUN = as.chron)
Soluzione
- L'errore di battitura nel
f
è stato già sottolineato. - Inoltre ci sono alcune caratteristiche di
read.zoo
che si potrebbe desiderare di prendere vantaggio. Innanzitutto, nota che se il valore dell'argomentoindex
è una lista allora le colonne di riferimento in ciascun componente di detto elenco vengono passati come argomenti separati perFUN
. Si noti inoltre che un argomentoFUN2
è disponibile che viene applicato all'uscita diFUN
modo da poter scrivere in maniera compatta come questo:
Così provare questo:
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)
È possibile che questo è stato scritto per essere autosufficiente così si può solo che copiare pari pari negli appunti e poi incollarlo nella sessione R. Per usarlo con il file sostituire textConnection(Lines)
con "myfile"
.
Altri suggerimenti
La vostra funzione f
deve cercare tmp
. Probabilmente previsto:
f <- function(x) as.chron(paste(x[,1],x[,2]))
tmp <- read.zoo("myfile", index = 1:2, sep=" ", FUN = f)
Inoltre, i dati di esempio si ha postato sembra che sia delimitato da tabulazioni, non delimitato da spazi, quindi potrebbe essere necessario per questo, invece:
tmp <- read.zoo("myfile", index = 1, sep="\t", FUN = as.chron)