How to find same element in txt file (in a coloumn) and find the amount for averaging the value of another coloumn ?
1 次查看(过去 30 天)
显示 更早的评论
i have a txt file that contain hundreds rows and 7 coloumns
what must i do if i want to find (in coloumn 1) a same number and their amount to calculate the average of coloumn 4, 5, 6, and 7 respectively in those specific rows
the data in rata2_j1.txt
please help, thank a lot
0 个评论
采纳的回答
Are Mjaavatten
2019-3-30
There may be more elegant ways to read the file, but I often prefer to use textscan to read a text file into a cell array of strings. This lets me experiment with parsing to make sure I get it right.
The cyc values vary between 1 and 260, but some values are missing in every set. For every cyc value I select the corresponding lines in the data array and calculate the mean.
fid = fopen('rata2_j1.txt');
lines = textscan(fid,'%s', 'Delimiter', '\n','HeaderLines' ,1);
fclose(fid);
lines = lines{1}; % Cell array of strings, one per line
N = length(lines);
cyc = zeros(N,1);
data = zeros(N,6);
for i = 1:N
A = sscanf(lines{i},'%f'); % Parse line to array of 7 dounbles
cyc(i) = A(1);
data(i,:) = A(2:7);
end
averages = zeros(260,4);
for i = 1:260
averages(i,:) = mean(data(cyc==i,3:6),1);
end
Note that I have calculated averages for each cyc value and column separately. If you want to average all four columns, add the line:
average = mean(averages,2);
3 个评论
Are Mjaavatten
2019-3-30
编辑:Are Mjaavatten
2019-3-30
I failed to notice that there are no data for cyc = 178 or cyc = 243. How to handle this would depend on your further use of the data. Sometimes keeping the NaNs is useful, sometimes not.
One way is to remove the NaN averages afterwards:
averages(all(isnan(averages),2),:) = [];
Alternativley, you can calculate averages for only the cyc values that are found in the file:
cyc_values = unique(cyc);
n_cyc = length(cyc_values);
averages = zeros(n_cyc,4);
for i = 1:n_cyc
averages(i,:) = mean(data(cyc == cyc_values(i),3:6),1);
end
The results are identical. Of course now row 250 of averages will hold the results for cyc = 252.
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Large Files and Big Data 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!