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]]