[R-es] Conversión de objeto temporal (TS) a matriz (o data.frame)

Rubén Gómez Antolí lobo en mucharuina.com
Mar Jun 4 02:35:19 CEST 2013


Hola:

Ante todo, gracias por las respuestas.

El 03/06/13 01:23, Oscar Perpiñán Lamigueiro escribió:
>
> Hola,
>
> Si no te entiendo mal, necesitas la conversión a matriz como paso
> intermedio para agregar por meses (o cualquier unidad temporal).

¡Hum! No estoy seguro de que agregar sea lo que quiero hacer.

> Si es
> así, te aconsejo que uses el paquete zoo y el método aggregate para la
> clase zoo.
>
> Por ejemplo:
>
> library(zoo)
> dats <- data.frame(date=seq(as.Date('2012-01-01'), by='day', length=3*365),
>                          A=rnorm(3*365), B=rnorm(3*365), C=rnorm(3*365))
>
> z <- zoo(dats[,-1], dats$date)
>
> Zyearmon <- aggregate(z, by=as.yearmon)
>
> month <- function(x) as.numeric(format(x, "%m"))
> year <- function(x) as.numeric(format(x, "%Y"))
>
> Zmon <- aggregate(z, by=month)
> Zyear <- aggregate(z, by=year)

Posiblemente sea por desconocimiento de la clase zoo pero... no veo el 
camino para realizar las distintas operaciones que estoy realizando, por 
ejemplo:

# Creación de la matriz de salida.
   matriz.salida<-data.frame(
     ndatos= apply(x.matriz,2,function(x) length(which(!is.na(x)))),
     vminimo= formatC(
       apply(x.matriz,2,function(x) min(x,na.rm=T)),
       dig=2,format="f"),
     vmax=formatC(
       apply(x.matriz,2,function(x) max(x,na.rm=T)),
       dig=2,format="f"),
     media=formatC(
       apply(x.matriz,2,function(x) mean(x,na.rm=T)),
       dig=2,format="f"),
     mediana=formatC(
       apply(x.matriz,2,function(x) median(x,na.rm=T)),
       dig=2,format="f"),
     desvtip=formatC(
       apply(x.matriz,2,function(x) sd(x,na.rm=T)),
       dig=2,format="f"),
     varianza=formatC(
       apply(x.matriz,2,function(x) var(x,na.rm=T)),
       dig=2,format="f"),
     shapiro.valor=formatC(
       aux.shapiro[1,],dig=4,format="f"),
     shapiro.valp=formatC(
       aux.shapiro[2,],dig=4,format="f")
     )

Siendo x.matriz un objeto TS convertido a matriz. Aux.shapiro la calculo 
así:

# Prueba de Shapiro y Wilk
   aux.shapiro<-matrix(unlist(apply(x.matriz,2,function(x)
     shapiro.test(x)[1:2])),
     ncol=12,nrow=2)

¡Ah, vale!:

aggregate(z,by=month,FUN=shapiro.test)

(Aunque esto me fuerza a tirar a la basura la función que había 
construido -con mi buen rato que me había llevado- y hacerla de nuevo)

Última pregunta, con un objeto ts es muy fácil llevarlo a un documento 
como una tabla: xtable(objeto.ts), ¿y con un objeto zoo? (Estoy buscando 
y nada)

Y otra, ¿convertir objetos ts a zoo y viceversa? Estoy probando con 
as.ts() y agua también, pongo unos datos de ejemplo que los que has 
puesto son en exceso numerosos:

lere<-data.frame(date=seq(as.Date("2013-01-01"),by="month",length=3*12),A=rnorm(3*12))
lara<-zoo(lere[,-1],lere$date)
as.ts(lara)

El resultado no es ni remotamente parecido a lo que debería salir.

> Saludos.
>
> Oscar

Gracias por todo.

Salud y Revolución.

Lobo.

Pd: Acabo de encontrar como resolver el tema de xtable:

xtable(aggregate(lara,as.yearmon))

Lo curioso es que xtable convierte el nombre de los meses del perfecto 
español en que lo muestra aggregate a la lengua de la pérfida Albión. 
Habrá que pelear con eso.
-- 
Libertad es poder elegir en cualquier momento. Ahora yo elijo GNU/Linux,
para no atar mis manos con las cadenas del soft propietario.
Porque la libertad no es tu derecho, es tu responsabilidad.
http://www.mucharuina.com
---------
Desde El Ejido, en Almería, usuario registrado Linux #294013
http://www.counter.li.org



Más información sobre la lista de distribución R-help-es