Matlab - Agrupar datos de una columna

   
Vista:

Agrupar datos de una columna

Publicado por Aura (33 intervenciones) el 11/03/2011 22:45:19
Buenas noches,
tengo dos columnas, años y precipitaciones diarias, quiero calcular para cada año la precipitación diaria máxima.
años precipitación
2011 0.1
2011 0
2011 8
2010 0.5
2009 ...
2009
2009
2009
2009
2008
2008
...
necesito hallar el valor máximo de precipitación para cada año (e.g. para el 2011 sería 8) y de cada año tengo un número de datos diferentes ¿podríais ayudarme?
Gracias,
Aura.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Dave

Agrupar datos de una columna

Publicado por Dave correa.dave30@gmail.com (934 intervenciones) el 12/03/2011 13:16:10
Hola Aura;

Podrías usar la función find para buscar los maximos por años;

Saludos
Dave
correa.dave30@gmail.com
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de JEREMIAS CABALLERO

Agrupar datos de una columna

Publicado por JEREMIAS CABALLERO (3432 intervenciones) el 12/03/2011 20:28:00
bueno me pareció la pregunta y me puse a pensar y luego hice un programa para la pregunta:
alli: El programa es:
%---------------------------------------------------------------
%INICIO DEL PROGRAMA
clc, clear
% DATA: AÑOS Y PRECIPITACIONES POR AÑOS POR COLUMNA
DATA=[2011 2;2011 3;2011 7;2012 1;2012 3;2012 6;2012 9;2013 2;2013 1;2013 6;2013 5;2013 4;2015 7;2029 0; 2029 80]
[fila, col]=size(DATA);
r=1;n=1;
MATRIZPORANOS(1,:)=DATA(1,:);
for k=2:fila
if MATRIZPORANOS(1,1)==DATA(k,1)
n=n+1;
MATRIZPORANOS(n,:)=DATA(k,:);
else
if n==1
MAXPRECIPITACION(r,:)=MATRIZPORANOS;
else
MAXPRECIPITACION(r,:)=max(MATRIZPORANOS);
end
clear MATRIZPORANOS;
MATRIZPORANOS(1,:)=DATA(k,:);
n=1;
r=r+1;
end
end

if n==1
MAXPRECIPITACION(r,:)=MATRIZPORANOS;
else
MAXPRECIPITACION(r,:)=max(MATRIZPORANOS);
end
MAXPRECIPITACION

%FIN DEL PROGRAMA
%--------------------------------------------------------------------------------------------



EJECUCION, le he guardado con el nombre de precipitaciones 1

>> precipitaciones1

DATA =

2011 2
2011 3
2011 7
2012 1
2012 3
2012 6
2012 9
2013 2
2013 1
2013 6
2013 5
2013 4
2015 7
2029 0
2029 80


MAXPRECIPITACION =

2011 7
2012 9
2013 6
2015 7
2029 80



saludos: Jeremias
jjcc94@hotmail.com
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de JEREMIAS CABALLERO

Agrupar datos de una columna

Publicado por JEREMIAS CABALLERO jjcc94@hotmail.com (3432 intervenciones) el 12/03/2011 20:52:53
%ASESORO EN TESIS Y PROYECTOS USANDO MATLAB,
jjcc94@hotmail.com

bueno me pareció la pregunta y me puse a pensar y luego hice un programa para la pregunta:
alli: El programa es:
%---------------------------------------------------------------
%INICIO DEL PROGRAMA
clc, clear
% DATA: AÑOS Y PRECIPITACIONES POR AÑOS POR COLUMNA
DATA=[2011 2;2011 3;2011 7;2012 1;2012 3;2012 6;2012 9;2013 2;2013 1;2013 6;2013 5;2013 4;2015 7;2029 0; 2029 80]
[fila, col]=size(DATA);
r=1;n=1;
MATRIZPORANOS(1,:)=DATA(1,:);
for k=2:fila
if MATRIZPORANOS(1,1)==DATA(k,1)
n=n+1;
MATRIZPORANOS(n,:)=DATA(k,:);
else
if n==1
MAXPRECIPITACION(r,:)=MATRIZPORANOS;
else
MAXPRECIPITACION(r,:)=max(MATRIZPORANOS);
end
clear MATRIZPORANOS;
MATRIZPORANOS(1,:)=DATA(k,:);
n=1;
r=r+1;
end
end

if n==1
MAXPRECIPITACION(r,:)=MATRIZPORANOS;
else
MAXPRECIPITACION(r,:)=max(MATRIZPORANOS);
end
MAXPRECIPITACION

%FIN DEL PROGRAMA
%--------------------------------------------------------------------------------------------



EJECUCION, le he guardado con el nombre de precipitaciones 1

>> precipitaciones1

DATA =

2011 2
2011 3
2011 7
2012 1
2012 3
2012 6
2012 9
2013 2
2013 1
2013 6
2013 5
2013 4
2015 7
2029 0
2029 80


MAXPRECIPITACION =

2011 7
2012 9
2013 6
2015 7
2029 80
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Agrupar datos de una columna

Publicado por Aura (33 intervenciones) el 12/03/2011 22:24:25
¡Muchísimas gracias! lo probaré en mi ordenador (en el que estoy ahora no tiene matlab), ya os contaré. ¡Saludos!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de JOSE JEREMIAS CABALLERO

Agrupar datos de una columna

Publicado por JOSE JEREMIAS CABALLERO jjcc94@hotmail.com (3432 intervenciones) el 13/03/2011 16:24:40
Hay Matlab Portables y la mas pequeña es Matlab 6.5 pesa aproximadamente 89MB, y no necesitas instalarlo en el ordenador, simplemente lo descargas y hace haces doble clic en el archivo, en el plataforma Windows funciona muy bien y con eso podemos ejecutar en el lugar que encuentres , donde exista un ordenador.
lo puedes bajar desde este direccion:

http://rapidshare.com/#!download|266l3|447630482|Laboratorio_de_matrices_6.5__lite_.rar|72086
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Agrupar datos de una columna

Publicado por Aura (33 intervenciones) el 13/03/2011 19:00:36
¡Genial! gracias. Por cierto el programa va estupendamente :D
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Agrupar datos de una columna

Publicado por Aura (33 intervenciones) el 14/03/2011 18:58:17
José Jeremías,
creo que el programa no funciona bien, lo he comprobado con una tabla dinámica en excel y coinciden ciertos máximos pero no otros.
Gracias, Aura.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de JOSE CABALLERO

Agrupar datos de una columna

Publicado por JOSE CABALLERO jjcc94@hotmail.com (3432 intervenciones) el 14/03/2011 19:41:58
Si deseas mandame tu tabla dinamica a mi correo, para ver en donde esta fallando el programa.
Sin tu informacion no creo que te pueda ayudar. Ademas hay que saber como estan ubicadas tus datos en excel.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Agrupar datos de una columna

Publicado por Aura (33 intervenciones) el 15/03/2011 22:24:11
Buenas noches José,
yo estaba cometiendo un error al introducir los datos, la primera versión de tu programa es correcta, disculpa las molestias y muchísimas gracias por tu ayuda.
Saludos,
Aura.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de JOSE CABALLERO

Agrupar datos de una columna

Publicado por JOSE CABALLERO jjcc94@hotmail.com (3432 intervenciones) el 15/03/2011 22:36:59
Bueno fue un gusto poder ayudarte Aura. En esta ocasión. nos vemos.
Hasta luego.
Jose Caballero.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de JOSE CABALLERO

Agrupar datos de una columna

Publicado por JOSE CABALLERO jjcc94@hotmail.com (3432 intervenciones) el 14/03/2011 20:58:08
Aqui te mando el programa mejorado, pero solo he mejorado la impresion de datos y la entrada de datos. El cuerpo del programa es el mismo y no he encontrado el error. EL comando rand(1,n) genera numero aleatorios de 1 fila y n columnas. Este programa es mas generico, porque tu puedes introducir los datos por teclado. Se puede hacer un programa aun más genérico, donde puedes jalar datas desde excel, ya que introducir por el teclado seria tediosos si es bastante la DATA y encima que sean números decimales.
EL PROGRAMA ES LA SIGUIENTE:

---------------------------------------------------------------------------------
clear
% DATA: AÑOS Y PRECIPITACIONES POR AÑOS POR COLUMNA
DATA=[];
N=input('Ingrese el número de años:');
for i=1:N
A=input('Ingrese el Año :');
B=input('Ingrese sus precipitaciones :');
DATA=[DATA; [A*ones(length(B),1) B']];
end
[fila, col]=size(DATA);
r=1;n=1;
MATRIZPORANOS(1,:)=DATA(1,:);
for k=2:fila
if MATRIZPORANOS(1,1)==DATA(k,1)
n=n+1;
MATRIZPORANOS(n,:)=DATA(k,:);
else
if n==1
MAXPRECIPITACION(r,:)=MATRIZPORANOS;
else
MAXPRECIPITACION(r,:)=max(MATRIZPORANOS);
end
clear MATRIZPORANOS;
MATRIZPORANOS(1,:)=DATA(k,:);
n=1;
r=r+1;
end
end

if n==1
MAXPRECIPITACION(r,:)=MATRIZPORANOS;
else
MAXPRECIPITACION(r,:)=max(MATRIZPORANOS);
end
[fil,col]=size(MAXPRECIPITACION);
fprintf('\nINFORMACION DE LA DATA\n')
for i=1:fila
fprintf('\t%7d %8.3f\n',DATA(i,1),DATA(i,2));
end
fprintf('\nPRECIPITACIONES MAXIMO POR AÑOS\n');
for i=1:fil
fprintf('\t%7d %8.3f\n',MAXPRECIPITACION(i,1),MAXPRECIPITACION(i,2));
end

--------------------------------------------------------------------------------------------
Y LA EJECUCION EN MATLAB ES ESTA.


>> precipitaciones1
Ingrese el número de años:5
Ingrese el Año :2011
Ingrese sus precipitaciones :8*rand(1,9)
Ingrese el Año :2008
Ingrese sus precipitaciones :9*rand(1,13)
Ingrese el Año :2015
Ingrese sus precipitaciones :4*rand(1,4)
Ingrese el Año :2000
Ingrese sus precipitaciones :rand(1,10)
Ingrese el Año :1900
Ingrese sus precipitaciones :5*rand(1,6)

INFORMACION DE LA DATA
2011 3.914
2011 2.702
2011 7.200
2011 2.954
2011 0.890
2011 6.242
2011 3.118
2011 1.934
2011 3.231
2008 0.868
2008 1.188
2008 8.478
2008 8.605
2008 5.177
2008 0.538
2008 2.113
2008 3.178
2008 7.391
2008 0.139
2008 0.387
2008 1.521
2008 5.842
2015 2.927
2015 2.591
2015 1.804
2015 2.188
2000 0.296
2000 0.745
2000 0.189
2000 0.687
2000 0.184
2000 0.368
2000 0.626
2000 0.780
2000 0.081
2000 0.929
1900 3.879
1900 2.434
1900 2.179
1900 2.234
1900 1.532
1900 2.543

PRECIPITACIONES MAXIMO POR AÑOS
2011 7.200
2008 8.605
2015 2.927
2000 0.929
1900 3.879
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar