[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