2011-07-20 13 views
5

Tengo algunos datos importados de csv que he convertido en un objeto xts. Si trato de convertirlo en un objeto TS (con el objetivo final de utilizar funciones como ACF) me sale:Convirtiendo xts a ts: Error en Ronda (frecuencia)

"Error en la ronda (frecuencia): argumento no numérico para matemática función"

el código para convertirlo es:

library("zoo") 
#Working With Milliseconds 
op <- options(digits.secs=3) 

#Rename Function 
clean_perfmon = function(x, servername) { 
    names(x)[names(x)=="X.PDH.CSV.4.0...Coordinated.Universal.Time..0."] <- "Time" 
    x$Time = strptime(x$Time, "%m/%d/%Y %H:%M:%OS") 
    return(x) 
} 

web02 = read.csv("/home/kbrandt/Desktop/Shared/web02_2011_07_20_1.csv") 
web02 = clean_perfmon(web02, "NY.WEB02") 
web02ts = xts(web02[,-1], web02[,"Time"]) 

el tiempo es mayormente regular, pero con alguna variación en la EM:

time(web02ts)[1:3] 
[1] "2011-07-20 11:21:50.459 EDT" "2011-07-20 11:21:51.457 EDT" "2011-07-20 11:21:52.456 EDT" 

Algunos de los datos han NA señala:

> web02ts[1:3,1] 
         X..NY.WEB02.Process.Idle....Processor.Time 
2011-07-20 11:21:50.459           NA 
2011-07-20 11:21:51.457         1134.819 
2011-07-20 11:21:52.456         1374.877 

Actualización:
Cambiar a resolución por segundo, y un subconjunto no na no ayuda:

> as.ts(web02ts[2:10,1]) 
Error in round(frequency) : Non-numeric argument to mathematical function 
> web02ts[2:10,1] 
        X..NY.WEB02.Process.Idle....Processor.Time 
2011-07-20 11:21:51         1134.819 
2011-07-20 11:21:52         1374.877 
2011-07-20 11:21:53         1060.842 
2011-07-20 11:21:54         1067.092 
2011-07-20 11:21:55         1195.205 
2011-07-20 11:21:56         1223.328 
2011-07-20 11:21:57         1121.774 
2011-07-20 11:21:58         1187.393 
2011-07-20 11:21:59         1378.001 
> 

Además, frequency(web02ts) devuelve NULL.

Respuesta

1

Un objeto xts/zoo debe ser regular para tener una frecuencia no NULL.

No mostrar cómo ha cambiado la resolución por segundo, pero si se trató a través de options(digits.secs=0), eso no funcionará, ya que sólo afecta a la impresión. Debería hacer algo como esto:

# example data 
set.seed(21) 
web02ts <- xts(rnorm(10), Sys.time()+1:10+runif(10)/3) 

web02ts_reg <- align.time(web02ts,1) 
frequency(web02ts_reg) 
# [1] 1 
as.ts(web02ts_reg) 
# Time Series: 
# Start = 1 
# End = 10 
# Frequency = 1 
# [1] 0.793013171 0.522251264 1.746222241 -1.271336123 2.197389533 
# [6] 0.433130777 -1.570199630 -0.934905667 0.063493345 -0.002393336 
3

strptime crea un objeto de la clase POSIXlt. as.ts no lo admite, y cree que es una lista, de ahí la queja sobre un argumento no numérico. Convierta a POSIXct en su lugar.

as.POSIXct(strptime(x$Time, "%m/%d/%Y %H:%M:%OS"))