[R-es] datos climáticos cambio de formato

daniel daniel319 en gmail.com
Vie Feb 15 22:39:35 CET 2013


Milagros,

library(xts) # carga también zoo
# genero una secuencia de año-mes para los datos
t <- timeBasedSeq('1941-01/1946-12')
t
# creo un data frame. Si hubieras enviado tu data.frame con dput
habría usado el tuyo.
df <- as.data.frame( matrix(1:72, ncol=12, byrow=TRUE))
df
# genero NA
df[ 5, 6] <- NA
df[ 3, 7] <- NA
df[ 6, 1] <- NA
df[ 3, 2] <- NA
df
# creo un vector para usarlo con zoo.
v <- as.vector(t(df))
v
# creo el objeto zoo indicandole que el indice es una fecha
z <- zoo(v, order.by = as.Date(t))
z
# aplico la función na.aggregate del paquete zoo
na.aggregate(as.zoo(z), months)


Espero te sirva.

Daniel Merino

El día 15 de febrero de 2013 18:24, Carlos Ortega
<cof en qualityexcellence.es> escribió:
> Hola,
>
> La verdad es que no sé si esto te valdrá... porque no sé qué quieres hacer
> después...
>
> ##################################################
> Lines <- "Year V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12
> 1941 18.0 16.3 15.2   10.1  8.1 8.3 8.8 9.2    7.9   12.2 11.9 14.6
> 1942 17.2 15.9 13.6   11.6  8.7 6.2 6.4 7.2    9.7   12.0 14.1 16.7
> 1943 17.6 17.3 13.5   12.5 10.5 7.0 8.2 7.9 -999.9 -999.9 13.5 17.7
> 1944 18.3 17.0 15.7 -999.9  9.6 9.4 8.0 7.5    9.5   10.6 14.6 17.4
> 1945 19.8 17.5 15.8   12.8 10.9 8.1 7.3 8.3   10.3   11.7 13.4 14.9
> 1946 15.9 15.0 14.2   12.7  9.2 7.6 8.1 8.6   10.2   10.8 13.1 15.2
> "
>
> t.data<-textConnection(Lines)
> datos<-read.table(t.data, header=T, as.is=T)
> close(t.data)
>
> library(reshape2)
> library(sqldf)
> datosres <- melt(datos, id.vars=c(1))
> datos.ord <- sqldf("select * from datosres order by Year")
>
> dat.zoo <- zooreg(datos.ord$value, start=1946, frequency=12)
> ##################################################
>
>
> Saludos,
> Carlos Ortega
> www.qualityexcellence.es
>
>
> El 15 de febrero de 2013 19:49, Milagros Rodriguez <
> milagrosrodriguezc en gmail.com> escribió:
>
>> Hola. Gracias Olivier!
>> Con lo sugerido obtengo:
>> > zooreg(valT, frequency = 12, start = c(1941, 1))
>>            V1   V2   V3   V4   V5   V6   V7   V8  V9  V10  V11  V12  V13
>> 1941(1)  1941 18.0 16.3 15.2 10.1  8.1  8.3  8.8 9.2  7.9 12.2 11.9 14.6
>> 1941(2)  1942 17.2 15.9 13.6 11.6  8.7  6.2  6.4 7.2  9.7 12.0 14.1 16.7
>> 1941(3)  1943 17.6 17.3 13.5 12.5 10.5  7.0  8.2 7.9   NA   NA 13.5 17.7
>> 1941(4)  1944 18.3 17.0 15.7   NA  9.6  9.4  8.0 7.5  9.5 10.6 14.6 17.4
>> .....
>>
>> Pero no es correcto el resultado.
>>
>> Sin embargo, logré que lo hiciera con:
>> valT.ts <- ts(valT, start = 1941, end = 2006)
>> class(valT.ts)
>> [1] "mts" "ts"
>>
>> > valT.ts
>>
>> Time Series:
>> Start = 1941
>> End = 2006
>> Frequency = 1
>>        V1   V2   V3   V4   V5   V6   V7   V8  V9  V10  V11  V12  V13
>> 1941 1941 18.0 16.3 15.2 10.1  8.1  8.3  8.8 9.2  7.9 12.2 11.9 14.6
>> 1942 1942 17.2 15.9 13.6 11.6  8.7  6.2  6.4 7.2  9.7 12.0 14.1 16.7
>> 1943 1943 17.6 17.3 13.5 12.5 10.5  7.0  8.2 7.9   NA   NA 13.5 17.7
>> 1944 1944 18.3 17.0 15.7   NA  9.6  9.4  8.0 7.5  9.5 10.6 14.6 17.4
>> 1945 1945 19.8 17.5 15.8 12.8 10.9  8.1  7.3 8.3 10.3 11.7 13.4 14.9
>> 1946 1946 15.9 15.0 14.2 12.7  9.2  7.6  8.1 8.6 10.2 10.8 13.1 15.2
>> 1947 1947 15.9 15.9   NA   NA 10.2  9.8  7.6 7.6  9.8 11.9 14.2 14.7
>> .....
>>
>> Pero al intentar aplicar la función:
>>
>> > na.aggregate(valT.ts, months)
>> Error en UseMethod("months") :
>>   no applicable method for 'months' applied to an object of class "ts"
>>
>>
>> Y no logro tener el formato necesario con mis datos. Cómo se podrá
>> solucionar?
>>
>> Gracias nuevamente!
>>
>>
>> El 15 de febrero de 2013 15:24, Olivier Nuñez <onunez en unex.es> escribió:
>>
>> > Intenta,
>> >
>> > zooreg(T, frequency = 12, start = c(1941, 1))
>> >
>> > o utilizando el paquete ts
>> >
>> > ts(T, frequency = 12, start = c(1941, 1))
>> >
>> > Un saludo. Olivier
>> >
>> > --  ______________________________**______
>> >
>> > Olivier G. Nuñez
>> > Email: onunez en unex.es
>> > http://matematicas.unex.es/~**onunez <http://matematicas.unex.es/~onunez
>> >
>> > Tel : +34 663 03 69 09
>> > Departamento de Matemáticas
>> > Universidad de Extremadura
>> >
>> > ______________________________**______
>> >
>> >
>> >
>> >
>> >
>> > El 15/02/2013, a las 17:11, Milagros Rodriguez escribió:
>> >
>> >  Hola!!
>> >>
>> >> tengo un data.frame donde cada fila corresponde a un año y cada columna
>> a
>> >> un mes (De enero a diciembre)
>> >>
>> >>  head(valT)
>> >>>
>> >>
>> >>             V2   V3   V4     V5   V6  V7  V8  V9    V10    V11  V12  V13
>> >> 1941 18.0 16.3 15.2   10.1  8.1 8.3 8.8 9.2    7.9   12.2 11.9 14.6
>> >> 1942 17.2 15.9 13.6   11.6  8.7 6.2 6.4 7.2    9.7   12.0 14.1 16.7
>> >> 1943 17.6 17.3 13.5   12.5 10.5 7.0 8.2 7.9 -999.9 -999.9 13.5 17.7
>> >> 1944 18.3 17.0 15.7 -999.9  9.6 9.4 8.0 7.5    9.5   10.6 14.6 17.4
>> >> 1945 19.8 17.5 15.8   12.8 10.9 8.1 7.3 8.3   10.3   11.7 13.4 14.9
>> >> 1946 15.9 15.0 14.2   12.7  9.2 7.6 8.1 8.6   10.2   10.8 13.1 15.2
>> >>
>> >>
>> >> Me gustaría transformarlo a un objeto "zoo" o "ts", es decir, que R
>> >> reconozca que cada fila es un año y cada columna es un mes.
>> >>
>> >>
>> >> Alguna sugerencia???
>> >>
>> >> Muchas gracias
>> >>
>> >> Milagros
>> >>
>> >>         [[alternative HTML version deleted]]
>> >>
>> >> ______________________________**_________________
>> >> R-help-es mailing list
>> >> R-help-es en r-project.org
>> >> https://stat.ethz.ch/mailman/**listinfo/r-help-es<
>> https://stat.ethz.ch/mailman/listinfo/r-help-es>
>> >>
>> >
>> >
>>
>>         [[alternative HTML version deleted]]
>>
>>
>> _______________________________________________
>> R-help-es mailing list
>> R-help-es en r-project.org
>> https://stat.ethz.ch/mailman/listinfo/r-help-es
>>
>>
>
>
> --
> Saludos,
> Carlos Ortega
> www.qualityexcellence.es
>
>         [[alternative HTML version deleted]]
>
>
> _______________________________________________
> R-help-es mailing list
> R-help-es en r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-help-es
>



-- 
Daniel



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