Info
此问题已关闭。 请重新打开它进行编辑或回答。
average of each 10 values of an external file and save in new file
1 次查看(过去 30 天)
显示 更早的评论
Hello everybody,
i am having the following problem: I have a file containing a lot of data (over 100.000 rows and 7 columns). The first column shows the time, the other six columns show force data at this exact time points (Fx, Fy, Fz and Tx, Ty, Tz). The problem is now that i get 10 values for each force and torque for the exact same time points. The solution is now to average these 10 values and give them out in a new file, so the final file only contains 1/10th of data of the old file and only one value for each force and torque for each time. How am I supposed to program this?
I am not able to write this program on my own since there are so many things I'd have to learn and I do not have any time for much programming right now. It's for a very important project of mine and I would really appreciate it if any of you could in any form help me. I really do not have that much time and this is very inconvenient.
Thank you so much in advance! If you have any questions please tell me!
Greetings, Sören :)
3 个评论
per isakson
2015-1-6
"The problem is now that i get 10 values for each force and torque for the exact same time points."   I don't understand this sentence
回答(4 个)
Guillaume
2015-1-6
Assuming that all timepoints are replicated 10 times and always together:
oldcontent = readtable('example11.xls');
data = table2array(oldcontent);
data = reshape(data, 10, [], 7);
meandata = squeeze(mean(data));
newcontent = array2table(meandata, 'VariableNames', oldcontent.Properties.VariableNames);
writetable(newcontent, 'example11mean.xls');
0 个评论
Image Analyst
2015-1-6
编辑:Image Analyst
2015-1-6
Here is one way:
numbers = xlsread('D:\Temporary stuff\example11.xls')
timePoints = numbers(:,1); % Get column 1
uniqueTimePoints = unique(timePoints);
% Allocate array for all of the means for all columns and all time points.
means = zeros(length(uniqueTimePoints), size(numbers, 2)-1);
for k = 1 : length(uniqueTimePoints)
% Get this time point.
thisTimePoint = uniqueTimePoints(k);
% Find out what rows have that particular time point.
theseRows = timePoints == thisTimePoint;
% Get the mean of all columns for that time point.
theseMeans = mean(numbers(theseRows, :), 1);
% Add on to our array that has means for all time points.
means(k, :) = theseMeans(2:end);
% Print the means out to the command window.
fprintf('The means for time point %d are\n', thisTimePoint);
fprintf('%.3f, ', theseMeans);
fprintf('\n');
end
In the command window:
The means for time point 1 are
1.000, 2.400, 2.600, 2.600, 2.600, 2.400, 2.700,
The means for time point 2 are
2.000, 4.600, 4.300, 4.700, 4.400, 4.300, 4.400,
The means for time point 3 are
3.000, 6.100, 6.300, 6.200, 6.200, 6.000, 6.300,
The means for time point 4 are
4.000, 7.800, 7.800, 7.500, 7.600, 7.600, 8.200,
Note that the code is robust enough to handle time points that are missing or not adjacent to each other.
0 个评论
Ajay Pherwani
2015-1-6
If it is not necessary to do programming and u just want the results just use the excel marco's , should be easy !!
0 个评论
Andrei Bobrov
2015-1-6
编辑:Andrei Bobrov
2015-1-6
oldcontent = readtable('example11.xls');
data = table2array(oldcontent);
[a,~,c] = unique(data(:,1));
[ii,jj] = ndgrid(c,1:size(data,2)-1);
d = data(:,2:end);
out = [a,accumarray([ii(:),jj(:)],d(:),[],@mean)];
newcontent = array2table(out, 'VariableNames', oldcontent.Properties.VariableNames);
writetable(newcontent, 'example11mean.xls');
1 个评论
Guillaume
2015-1-6
This is the best solution if the number of repeated time points is not consistent or they're not consecutive and it's a clever way to apply accumarray to several columns at once.
If the number of repeated time points is always the same and consecutive a simple reshape + mean is a lot more efficient.
此问题已关闭。
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!