How to Rearrange data?

7 visualizaciones (últimos 30 días)
Abcde
Abcde el 30 de Jun. de 2019
Respondida: Image Analyst el 30 de Jun. de 2019
I have input .txt file like :
Number Time Symbol
1 0 C
2 0 E
3 0 D
4 0 C
5 0 D
1 1 C
2 1 C
3 1 C
4 1 D
5 1 E
1 2 C
2 2 D
3 2 D
4 2 C
5 2 E
Where "Number"(1-5) was periodic with "Time"(0-2) and I need to calculate count of each "Symbol" with "Time" and I want to output file as .txt like:
Time C D E TOTAL(C+D+E)
0 2 2 1 5
1 3 1 1 5
2 2 2 1 5
Is there a way to get the output file by using MATLAB?
Thanks.

Respuesta aceptada

David Wilson
David Wilson el 30 de Jun. de 2019
Editada: David Wilson el 30 de Jun. de 2019
Try something like the following: First read in the data file (which I've called numData.txt). I've used your test data above.
inFname = 'numData.txt'
fid = fopen(inFname,'r');
[A] = fscanf(fid,'%i %i %s',[3,inf])';
fclose(fid);
Now provess the data. I've put a few checks in the code below. All going well, you should have a data file called OuputFile.txt. Note that "C" is ascii 67 etc.
%% Now process the data
outFname = 'OutputFile.txt';
fid = fopen(outFname,'w');
fprintf(fid,'%s\n', 'Time C D E Total(C+D+E)');
n = length(A);
if mod(n,5) % check we have multiple of 5
warning('missing data ??')
end
t = A(:,2);
if ~all(diff(t)>=0) % check time is all ascending
warning('time not ascending ??')
end
for i=1:5:n
k = i:i+4;
c = A(k,3);
C = sum(c==67);
D = sum(c==68);
E = sum(c==69);
tot = C+D+E; % should always = 5 ??
fprintf(fid,'%i, %i, %i, %i, %i \n', A(i,2), C,D,E,tot);
end
To check you can do something like: M
>> !type OutputFile.txt
Time C D E Total(C+D+E)
0, 2, 2, 1, 5
1, 3, 1, 1, 5
2, 2, 2, 1, 5

Más respuestas (1)

Image Analyst
Image Analyst el 30 de Jun. de 2019
Try importdata(), readtable(), or dlmread().

Etiquetas

Productos

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by