Matlab - Rellenar un archivo con datos faltantes

 
Vista:

Rellenar un archivo con datos faltantes

Publicado por canijo (6 intervenciones) el 08/08/2011 14:28:51
Hola buenas, estoy empezando con Matlab y tengo el siguiente problema:
Me han pasado un archivo.txt, que me lo cargo y lo leo Matlab. El archivo consta de una columna de fechas y otra de caudales, pero existen lagunas en los fechas y en su correspondiente dato, ya que se salta de un día a otro día que no es el siguiente. Pues bien lo que quiero hacer es crearme un archivo donde en una columna estén todos las fechas y en la otro donde estén los datos correspondientes a esa fecha, y en las fechas que no existan datos poner -1. El código que tengo es el siguiente, pero no me sale correctamente. Por favor pido ayuda. Muchas gracias:
Código:

fich=fopen(Qtxt,'r');
fgets(fich);
datQ = fscanf(fich,'%d/%d/%d %f',[4 Inf]);
fclose(fich);
datQ=datQ';
fechasD = datenum(datQ(:,3),datQ(:,2),datQ(:,1),0,0,0);
datos=[fechasD datQ(:,4)];
fechastotal=fechasD(1):fechasD(end);
fechastotal=fechastotal';
k=0;
for i=1:length(fechasD);
datoscorr(i+k)=datos(i,2);
if (fechastotal(i+k))< (fechasD(i));
k=abs((fechastotal(i+k)-fechasD(i)))-1;
for m=1:abs(fechastotal(i+k)-fechasD(i));
datoscorr(i+k+m)=-1 ;
end

end

end
datoscorr=datoscorr';
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 JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Rellenar un archivo con datos faltantes

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 08/08/2011 16:30:32
Hola Canijo.
Este es una sugerencia, no le hecho en matlab, pero dentro unos dias lo hare, pero alli te mando de como se podria hacer.
1). Primero crea un texto con las cualidades que quieres fecha y texto, pero con la condicion que haya toda las fechas completas y sus respectivos datos, y luego separalo como quieres.
ese seria tu primer programa programa1.m

2). Ahora tu programa anterior lo vuelves a guardar con el nombre de programa2.m y alli haces las modificaciones al programa2.m tal como quieres.

POSTADA: No haz copiado como es tu archivo te texto.
seria bueno que copiaras unos cuantos filas de tu archivo te texto, para poder ayudarte con mas certeza.

saludos.
JOSE JEREMIAS CABALLERO
ASESOR DE PROYECTOS CON MATLAB
PROFESOR DE METODOS NUMERICOS CON MATLAB
PROGRAMADOR EN MATLAB
[email protected]
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

Rellenar un archivo con datos faltantes

Publicado por canijo (6 intervenciones) el 09/08/2011 08:44:48
Muchas gracias José Jeremías.
Pero la verdad, no entiendo bien su propuesta, de todas formas le expongo como es mi archivo y un ejemplo de como debe quedar.

28/05/2009 0.76
29/05/2009 0.76
30/05/2009 0.76
31/05/2009 0.76
01/09/2009 0.32
02/09/2009 0.288
03/09/2009 0.324
04/09/2009 0.288
05/09/2009 0.288
06/09/2009 0.288
07/09/2009 0.288
08/09/2009 0.324
09/09/2009 0.324
10/09/2009 0.324

Como verá, existe un salto en las fechas, desde 31/05/2009 al 01/09/2009, pues bien, ese intervalo tengo que rellenarlo con las fechas que faltan y en la otra columna para esas fechas poner -1. Y así poder guardarme un archivo .txt con los datos ''rellenados''.
Muchas gracias por todo.

Un saludo
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
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Rellenar un archivo con datos faltantes

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 09/08/2011 15:28:23
Hola Canijo
Bueno no me llegastes a entender, lo que te estoy diciendo en lo anterior es que vayas de menos a mas. Ademas con tu ejemplo de fechas que haz puesto tengo mas claro que es lo quieres hacer. Si tus preguntas no son tan claras, entonces las respuestas que recibas hay veces tampoco van a ser precisas. Siempre le digo a las personas del foro, cuando pregunten tienen que ser claro y preciso y poner la mayor cantidad de información necesaria para poder comprender y responder con certeza.

1) Haz un programa en matlab que lea este archivo de texto llamado texto1.txt, y luego que lo guarde en otro archivo de texto llamado texto2.txt.

donde el archivo de texto1.txt debe contener las fechas que se encuentran abajo.
28/05/2009 0.76
29/05/2009 0.76
30/05/2009 0.76
31/05/2009 0.76
01/06/2009 0.32
02/06/2009 0.288
03/06/2009 0.324
04/06/2009 0.288
05/06/2009 0.288
06/06/2009 0.288
07/06/2009 0.288
08/06/2009 0.324
09/06/2009 0.324
10/06/2009 0.324

Cuando hayas hecho tu progrma lo copias al foro y te digo que es lo debes hacer en el siguiente programa.
Bueno por alli empezamos.

POSTADA: Te estoy dando una sugerencia.

POSTDATA:
saludos.
JOSE JEREMIAS CABALLERO
ASESOR DE PROYECTOS CON MATLAB
PROFESOR DE METODOS NUMERICOS CON MATLAB
PROGRAMADOR EN MATLAB
[email protected]
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

Rellenar un archivo con datos faltantes

Publicado por canijo (6 intervenciones) el 10/08/2011 12:04:12
Muchas gracias José Jeremías, por toda la ayuda. siguiendo un poco tus explicaciones he conseguido hacerlo, a lo mejor no del todo correcto en cuanto a programación pero lo he conseguido. El código es el siguiente:
fich=fopen(Dtxt,'r');
fgets(fich);
datQ = fscanf(fich,'%d/%d/%d %f',[4 Inf]);
fclose(fich);
datQ=datQ';
fechasD = datenum(datQ(:,3),datQ(:,2),datQ(:,1),0,0,0);
datos=[fechasD datQ(:,4)];
fechastotal=fechasD(1):fechasD(end);
fechastotal=fechastotal';
%%%Me creo una matriz con el valor de NODATA con las mismas dimensiones que las fechas
%%%totales
NODATA=input ('Introducir dato de NODATA');
datoscorr=ones(size(fechastotal))*(NODATA);
%%%La matriz esa me la creo porque el valor que quiero que salga para los
%%%NO DATA es -1, si quiero otro pues pongo otro%%%%%
%%%Con este bucle lo que hago es decirle que cuando las fechas en las que
%%%sean iguales me ponga el valor de los datos originales, y en los demas
%%%como no entra en ellos pues vale NODATA%%%%
m=[];
for i=1:length(fechasD);
m(i)=fechasD(i)-fechastotal(i);
datoscorr(i+m(i))= datos(i,2);
end
m=m';
%%%Creo el la mattriz completa%%%%
Datosdef=[fechastotal datoscorr];

%%%%Ahora los guardo en fichero%%%%
% DatosCorregidos=input('Nombre del fichero a guardar')
fic=fopen('DatosCorregidos.txt','w');
fprintf(fic,'Fechas\t Caudales(m^3/s)\n');
fprintf(fic,'%6.0f\t%6.2f\n',Datosdef');
fclose(fic);

Ahora me encuentro con otro problema, tengo que obtener los valores máximos para cada mes de caudales, es decir, de la columna 2 del archivo que me he generado. Pero no lo consigo porque no todos los meses tienen el mismo número de datos, así que ahora estoy atrancado ahí, no se me ocurre como hacerlo, por eso pido por favor AYUDA. Mucahas gracias por todo.
Un saludo
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