Rubén Gómez Antolí
2011-Nov-26 22:42 UTC
[R-es] Media de elementos tomados uno a uno de un data.frame
Hola:
Tengo un conjunto de datos de viento de esta forma:
vientos<-matrix(c(
c(rep(1,5),rep(2,5),rep(3,5)), # Meses
rep(c("Calma","Norte","Este","Sur","Oeste"),3),
# Dirección
c(10,0,0,0,0,8,0,0,0,0,11,0,0,0,0), # Calma
c(0,7,8,10,1,0,9,8,7,6,0,11,10,4,3), # 1-5 m/s
c(0,9,10,12,7,0,10,3,2,1,0,10,7,6,8)), # 6-10 m/s
ncol=5,dimnames=list(c(1:15),
c("Meses","Dirección","Calma","1-5
m/s","6-10 m/s"))
)
Obviamente tengo datos de los doce meses pero me quedo en el tercero por
no complicar. (Los datos son porcentajes de ocurrencia)
Ahora quiero agrupar por estaciones (invierno, primavera...) esos datos,
por lo que debería ir sumando cada «celda» una a una según intervalo de
velocidad y dirección del viento, y dividir entre tres -para obtener la
media-. Quedaría así:
Dirección, Calma, 1-5 m/s, 6-10 m/s
Calma, (10+8+11)/3,0,0
Norte,0,(7+9+11)/3,(9+10+10)/3
etc.
El caso es que estoy ahí, bregando con cbind, rbind, rowsMeans y tapply
y no lo consigo. Se que puedo hacerlo con un bucle, ya lo he resuelto
antes de esta forma, pero me gustaría ver como resolverlo con «ordenes»
de R.
Por cierto, para calcular medias según intervalos se que existe
weighted.mean(), ¿y la mediana y la desviación típica? (Tengo creadas
mis propias funciones pero me gustaría saber si existen en R)
Gracias por vuestra atención y por las posibles respuestas.
Salud y Revolución.
Lobo.
--
Libertad es poder elegir en cualquier momento. Ahora yo elijo GNU/Linux,
para no atar mis manos con las cadenas del soft propietario.
---------
Desde El Ejido, en Almería, usuario registrado Linux #294013
http://www.counter.li.org
Marcuzzi, Javier Rubén
2011-Nov-26 23:27 UTC
[R-es] Media de elementos tomados uno a uno de un data.frame
Estimado Rubén
Yo pasaría su matriz a data.frame
Posiblemente su código es correcto, pero para mi es mucho mas fácil usar
data.frame, y por otro lado se pueden crear bucles o utilizar funciones
vectorizadas de R, que son mucho más rápidas.
Javier
-----Mensaje original-----
From: Rubén Gómez Antolí
Sent: Saturday, November 26, 2011 7:42 PM
To: r-help-es en r-project.org
Subject: [R-es] Media de elementos tomados uno a uno de un data.frame
Hola:
Tengo un conjunto de datos de viento de esta forma:
vientos<-matrix(c(
c(rep(1,5),rep(2,5),rep(3,5)), # Meses
rep(c("Calma","Norte","Este","Sur","Oeste"),3),
# Dirección
c(10,0,0,0,0,8,0,0,0,0,11,0,0,0,0), # Calma
c(0,7,8,10,1,0,9,8,7,6,0,11,10,4,3), # 1-5 m/s
c(0,9,10,12,7,0,10,3,2,1,0,10,7,6,8)), # 6-10 m/s
ncol=5,dimnames=list(c(1:15),
c("Meses","Dirección","Calma","1-5
m/s","6-10 m/s"))
)
Obviamente tengo datos de los doce meses pero me quedo en el tercero por
no complicar. (Los datos son porcentajes de ocurrencia)
Ahora quiero agrupar por estaciones (invierno, primavera...) esos datos,
por lo que debería ir sumando cada «celda» una a una según intervalo de
velocidad y dirección del viento, y dividir entre tres -para obtener la
media-. Quedaría así:
Dirección, Calma, 1-5 m/s, 6-10 m/s
Calma, (10+8+11)/3,0,0
Norte,0,(7+9+11)/3,(9+10+10)/3
etc.
El caso es que estoy ahí, bregando con cbind, rbind, rowsMeans y tapply
y no lo consigo. Se que puedo hacerlo con un bucle, ya lo he resuelto
antes de esta forma, pero me gustaría ver como resolverlo con «ordenes»
de R.
Por cierto, para calcular medias según intervalos se que existe
weighted.mean(), ¿y la mediana y la desviación típica? (Tengo creadas
mis propias funciones pero me gustaría saber si existen en R)
Gracias por vuestra atención y por las posibles respuestas.
Salud y Revolución.
Lobo.
--
Libertad es poder elegir en cualquier momento. Ahora yo elijo GNU/Linux,
para no atar mis manos con las cadenas del soft propietario.
---------
Desde El Ejido, en Almería, usuario registrado Linux #294013
http://www.counter.li.org
_______________________________________________
R-help-es mailing list
R-help-es en r-project.org
https://stat.ethz.ch/mailman/listinfo/r-help-es
Jorge I Velez
2011-Nov-27 00:23 UTC
[R-es] Media de elementos tomados uno a uno de un data.frame
Hola Ruben, Dale una mirada a ?aggregate y ?ave. Un saludo, Jorge.- 2011/11/26 Rubén Gómez Antolí <>> Hola: > > Tengo un conjunto de datos de viento de esta forma: > > vientos<-matrix(c( > c(rep(1,5),rep(2,5),rep(3,5)), # Meses > rep(c("Calma","Norte","Este","**Sur","Oeste"),3), # Dirección > c(10,0,0,0,0,8,0,0,0,0,11,0,0,**0,0), # Calma > c(0,7,8,10,1,0,9,8,7,6,0,11,**10,4,3), # 1-5 m/s > c(0,9,10,12,7,0,10,3,2,1,0,10,**7,6,8)), # 6-10 m/s > ncol=5,dimnames=list(c(1:15), > c("Meses","Dirección","Calma",**"1-5 m/s","6-10 m/s")) > ) > > Obviamente tengo datos de los doce meses pero me quedo en el tercero por > no complicar. (Los datos son porcentajes de ocurrencia) > > Ahora quiero agrupar por estaciones (invierno, primavera...) esos datos, > por lo que debería ir sumando cada «celda» una a una según intervalo de > velocidad y dirección del viento, y dividir entre tres -para obtener la > media-. Quedaría así: > > Dirección, Calma, 1-5 m/s, 6-10 m/s > Calma, (10+8+11)/3,0,0 > Norte,0,(7+9+11)/3,(9+10+10)/3 > etc. > > El caso es que estoy ahí, bregando con cbind, rbind, rowsMeans y tapply y > no lo consigo. Se que puedo hacerlo con un bucle, ya lo he resuelto antes > de esta forma, pero me gustaría ver como resolverlo con «ordenes» de R. > > Por cierto, para calcular medias según intervalos se que existe > weighted.mean(), ¿y la mediana y la desviación típica? (Tengo creadas mis > propias funciones pero me gustaría saber si existen en R) > > Gracias por vuestra atención y por las posibles respuestas. > > Salud y Revolución. > > Lobo. > -- > Libertad es poder elegir en cualquier momento. Ahora yo elijo GNU/Linux, > para no atar mis manos con las cadenas del soft propietario. > --------- > Desde El Ejido, en Almería, usuario registrado Linux #294013 > http://www.counter.li.org > > ______________________________**_________________ > R-help-es mailing list > R-help-es@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]]
oscar.perpinan en upm.es
2011-Nov-27 11:17 UTC
[R-es] Media de elementos tomados uno a uno de un data.frame
Hola,
Yo lo haría definiendo un data.frame en lugar de una matriz (como ya te han
aconsejado), definiendo una matriz para la estación y usando aggregate (como
también te han aconsejado). Un posible código es:
vientos <- data.frame(meses = c(rep(1, 5), rep(2, 5), rep(3, 5)), # Meses
dir = rep(c("Calma", "Norte", "Este",
"Sur", "Oeste"), 3), # Dirección
calma = c(10, 0, 0, 0, 0, 8, 0, 0, 0, 0, 11, 0, 0, 0, 0), # Calma
vel1 = c(0, 7, 8, 10, 1, 0, 9, 8, 7, 6, 0, 11, 10, 4, 3), # 1 - 5 m/s
vel2 = c(0, 9, 10, 12, 7, 0, 10, 3, 2, 1, 0, 10, 7, 6, 8)) # 6 - 10 m/s
est = function(x){
n = (x - 1) %/% 3 + 1
ests = c(''inv'', ''pri'',
''ver'', ''oto'')
res = ests[n]
res
}
aggregate(cbind(vel1, vel2) ~ est(meses) + dir, FUN = mean, data = vientos)
Para la mediana debes usar median y para la desv. estandar sd. En la ayuda de
aggregate te cuentan como conseguir resultados de varias funciones a la vez.
Saludos.
Oscar.
--
Enviado desde mi teléfono Android con K-9 Mail. Disculpa mi brevedad
"Rubén Gómez Antolí" <lobo@mucharuina.com> escribió:
Hola:
Tengo un conjunto de datos de viento de esta forma:
vientos<-matrix(c(
c(rep(1,5),rep(2,5),rep(3,5)), # Meses
rep(c("Calma","Norte","Este","Sur","Oeste"),3),
# Dirección
c(10,0,0,0,0,8,0,0,0,0,11,0,0,0,0), # Calma
c(0,7,8,10,1,0,9,8,7,6,0,11,10,4,3), # 1-5 m/s
c(0,9,10,12,7,0,10,3,2,1,0,10,7,6,8)), # 6-10 m/s
ncol=5,dimnames=list(c(1:15),
c("Meses","Dirección","Calma","1-5
m/s","6-10 m/s"))
)
Obviamente tengo datos de los doce meses pero me quedo en el tercero por
no complicar. (Los datos son porcentajes de ocurrencia)
Ahora quiero agrupar por estaciones (invierno, primavera...) esos datos,
por lo que debería ir sumando cada «celda» una a una según intervalo de
velocidad y dirección del viento, y dividir entre tres -para obtener la
media-. Quedaría así:
Dirección, Calma, 1-5 m/s, 6-10 m/s
Calma, (10+8+11)/3,0,0
Norte,0,(7+9+11)/3,(9+10+10)/3
etc.
El caso es que estoy ahí, bregando con cbind, rbind, rowsMeans y tapply
y no lo consigo. Se que puedo hacerlo con un bucle, ya lo he resuelto
antes de esta forma, pero me gustaría ver como resolverlo con «ordenes»
de R.
Por cierto, para calcular medias según intervalos se que existe
weighted.mean(), ¿y la mediana y la desviación típica? (Tengo creadas
mis propias funciones pero me gustaría saber si existen en R)
Gracias por vuestra atención y por las posibles respuestas.
Salud y Revolución.
Lobo.
--
Libertad es poder elegir en cualquier momento. Ahora yo elijo GNU/Linux,
para no atar mis manos con las cadenas del soft propietario.
---------
Desde El Ejido, en Almería, usuario registrado Linux #294013
http://www.counter.li.org
_____________________________________________
R-help-es mailing list
R-help-es@r-project.org
https://stat.ethz.ch/mailman/listinfo/r-help-es
[[alternative HTML version deleted]]