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)
È stato utile?

Soluzione

  1. L'errore di battitura nel f è stato già sottolineato.
  2. Inoltre ci sono alcune caratteristiche di read.zoo che si potrebbe desiderare di prendere vantaggio. Innanzitutto, nota che se il valore dell'argomento index è una lista allora le colonne di riferimento in ciascun componente di detto elenco vengono passati come argomenti separati per FUN. Si noti inoltre che un argomento FUN2 è disponibile che viene applicato all'uscita di FUN 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)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top