An embedded and charset-unspecified text was scrubbed... Name: no disponible URL: <https://stat.ethz.ch/pipermail/r-help-es/attachments/20130215/22903766/attachment.pl>
[R-es] datos climáticos cambio de formato
8 messages · Milagros Rodriguez, Olivier Nuñez, Carlos Ortega +1 more
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 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
An embedded and charset-unspecified text was scrubbed... Name: no disponible URL: <https://stat.ethz.ch/pipermail/r-help-es/attachments/20130215/ad5c90b9/attachment.pl>
An embedded and charset-unspecified text was scrubbed... Name: no disponible URL: <https://stat.ethz.ch/pipermail/r-help-es/attachments/20130215/dc7ab27a/attachment.pl>
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
2 days later
An embedded and charset-unspecified text was scrubbed... Name: no disponible URL: <https://stat.ethz.ch/pipermail/r-help-es/attachments/20130218/62081047/attachment.pl>
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
An embedded and charset-unspecified text was scrubbed... Name: no disponible URL: <https://stat.ethz.ch/pipermail/r-help-es/attachments/20130219/6fd76d39/attachment.pl>