D'accord, j'apprends toujours à utiliser MATLAB. J'ai deux fichiers dans des formats différents. Un fichier Excel. data1.xls
, taille = 86400 X 62. Ça ressemble à :
Date/Heure par1 par2 par3 par4 par5 par6 par6 par7 par8 par9
08/02/09 00:06:45 0 3 27 9.9 -133.2 0 0 0 1 0
Un autre fichier, data2.csv
, taille = 144 X 27. (Si rien ne manque.)
Ça ressemble à :
date heure P01 P02 P03 P04 P05 P06 P07 P08 P09 P10 P11
8/16/2009 0:00 51 45 46 54 53 52 524 5 399 89 78
Maintenant, j'utilise
Data10minAvg = mean(reshape(Data,300,144,62));
pour obtenir la moyenne de 10 min du premier fichier Excel. Maintenant, je dois associer ce fichier que je suis en train de créer avec le fichier .csv. Le problème est que de nombreux horodatages manquent dans le fichier .csv.
Comment puis-je transformer data2.csv
en un fichier de taille 144 X 27, en remplaçant les horodatages manquants par des lignes de zéro ?
Cela m'aidera vraiment à comparer le fichier data1.xls avec newdata2.csv.
Mise à jour
Bonjour, c'est Paul. Merci beaucoup Geodesic. Je ne sais pas comment modifier donc je n'aurais pas pu écrire mes fichiers entiers. Vous avez parfaitement compris la question.
Mais maintenant, quand j'exécute votre code, il génére un fichier de longueur 377 X 11 lorsque j'utilise timediff(i) >10 comme je veux des intervalles de 10 min, donc je ne devrais pas avoir plus de 144 comme longueur de fichier. Votre code est assez compliqué pour moi, j'utilisais
fid = fopen('data2.csv', 'rt');
topLine = fgets(fid);
data = textscan(fid, '%s %f %f %f %f %f%f%f %f %f %f %f%f%f %f %f %f %f%f%f %f %f %f %f%f%f %f %f ' ,.... 'Delimiter',',', 'CollectOutput',1, 'HeaderLines',1);
fclose(fid);
p= [datenum(data{1}) data{2}];
for n=1:127 % ce fichier était de longueur 127
s=datevec(p(n,1)); Heure= s(1,4) min=s(1,5)
nTime(n,:)=60*Heure+min; end
pour obtenir mes heures
Pouvez-vous m'aider à comprendre votre dernière boucle for afin que je puisse l'utiliser.
Mon fichier final doit avoir une taille de 144 X 11 (les colonnes varient mais je peux les changer) mais il doit y avoir 144 lignes
**J'ai essayé d'utiliser votre code timeDiff = round(diff(datenum(time)*24*6)); il m'a donné 143 lignes, beaucoup plus proche de ce que je veux. **
et toutes les autres valeurs sont arrondies, y a-t-il un moyen de l'arrêter ?
Merci infiniment.