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

daniel daniel319 en gmail.com
Lun Feb 18 22:29:40 CET 2013


Milagros,

Ya que insistes en ignorar el help de R para saber para que sirve la
función dput ( ?dput). Voy a darte un ejemplo.
En mi e-mail anterior llegué a un data.frame z (cuando uses dput
utilizaré tus datos). Bueno en mi sesión
de R procedí a:

dput(z)

Al resusltado le hice un copy/paste en este e-mail asignándolo  a z.
En tu sesión puedes empezar a partir de aquí.

library(xts) # estoy acostumbrado a usar el paquete xts, y no
únicamente el zoo. Mi vicio.

z <- structure(c(1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L,
13L, 14L, 15L, 16L, 17L, 18L, 19L, 20L, 21L, 22L, 23L, 24L, 25L,
NA, 27L, 28L, 29L, 30L, NA, 32L, 33L, 34L, 35L, 36L, 37L, 38L,
39L, 40L, 41L, 42L, 43L, 44L, 45L, 46L, 47L, 48L, 49L, 50L, 51L,
52L, 53L, NA, 55L, 56L, 57L, 58L, 59L, 60L, NA, 62L, 63L, 64L,
65L, 66L, 67L, 68L, 69L, 70L, 71L, 72L), index = structure(c(-10592,
-10561, -10533, -10502, -10472, -10441, -10411, -10380, -10349,
-10319, -10288, -10258, -10227, -10196, -10168, -10137, -10107,
-10076, -10046, -10015, -9984, -9954, -9923, -9893, -9862, -9831,
-9803, -9772, -9742, -9711, -9681, -9650, -9619, -9589, -9558,
-9528, -9497, -9466, -9437, -9406, -9376, -9345, -9315, -9284,
-9253, -9223, -9192, -9162, -9131, -9100, -9072, -9041, -9011,
-8980, -8950, -8919, -8888, -8858, -8827, -8797, -8766, -8735,
-8707, -8676, -8646, -8615, -8585, -8554, -8523, -8493, -8462,
-8432), class = "Date"), class = "zoo")

# como verás no sólo te proporciono mis datos sino también información
# muy relevante sobre el tipo de datos que te envío. Luego sigo con
na.aggregate.

agrega_z <- na.aggregate(as.zoo(z), months)
# Siempre conviene revisar
str(agrega_z)
z_mean <- mean(agrega_z)
z_mean
z_sd <- sd(agrega_z)
z_sd
# para normalizar puedes usar directamente la función
?scale
z_nrmlz <- scale(agrega_z)
mean(z_nrmlz)  # seguramente muy cercano a cero
apply(z_nrmlz, 2, sd)
str(z_nrmlz)


Espero te sirva.

Daniel Merino

El día 18 de febrero de 2013 15:57, Milagros Rodriguez
<milagrosrodriguezc en gmail.com> escribió:
> Muchas gracias por sus aportes, finalmente fue útil el último código que
> recibí! gracias Daniel!
> De qué se trata dput?
> Quizás, me puedan ayudar con otra duda, que es cómo sacar los desvíos de
> cada dato,
> si tengo:
>
> le.T.reg <- zooreg(le.T.new)
> le.T.reg
>     data.1 data.2    data.3
>
> 1921-01-01 1921  1     8.50000
> 1921-02-01 1921  2    14.00000
> 1921-03-01 1921  3    9.50000
> 1921-04-01 1921  4   196.50000
> ......
> 1988-10-01    1988   10    54.0
> 1988-11-01    1988    11      3.0
> 1988-12-01    1988    12    21.0
>
>
> # para calcular la media histórica utilicé (me interesa la tercer columna):
> m.hist <- aggregate(le.T.new, format(time(le.T.new), "%m"), mean)
>
>        V1 V2       V3
> 01 1954.5  1 15.15441
> 02 1954.5  2 17.16176
> 03 1954.5  3 24.57353
> 04 1954.5  4 37.21324
> 05 1954.5  5 69.50735
> 06 1954.5  6 79.56618
> 07 1954.5  7 75.44030
> 08 1954.5  8 54.73881
> 09 1954.5  9 31.34559
> 10 1954.5 10 19.77206
> 11 1954.5 11 14.50735
> 12 1954.5 12 17.37500
>
> Ahora me gustaría, para normalizar los datos, poder calcular el desvío
> estandar o "anomalidad"
> es decir, la diferencia entre el valor mensual y la media histórica del mes,
> dividido luego por
> el desvío estándar
>
> ¡?
>
>
>
> El 15 de febrero de 2013 19:39, daniel <daniel319 en gmail.com> escribió:
>
>> 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
>
>



-- 
Daniel



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