How to calculate the mean/median/Standard deviation for each column in a table
372 views (last 30 days)
Show older comments
Nagamani Yaadavalli
on 4 Dec 2020
Commented: Nagamani Yaadavalli
on 8 Dec 2020
Here I have table has 716rows*9 coloumns called Analysis1 as shown in figure1.
I would like to each the following steps:
- The calcualtions for n number of files like this in a folder
- The formula should be calculated for each coulmn (not for rows) and all the values shoul be store in a one seperate file so that I can plot a graph
I have tried the formula using median(Analysis1) but showing the permute error as shown in figure 2.
I have suceeded applying the formula for an individual coulumn like as shown in figure2:
- Result1 = median(Analysis.Time)
- Result2 = median(Analysis.TempL1)
Any suggestion would be appreciated to solve this issue. Thanks in advance.
0 Comments
Accepted Answer
Steven Lord
on 4 Dec 2020
Let's look at a sample table.
load patients
T = table(LastName, Smoker, Height, Weight, Systolic, Diastolic);
head(T)
It makes sense to compute the mean for four variables in this table, but not for the LastName or Smoker variables.
M = varfun(@mean, T, 'InputVariables', @isnumeric)
This looks for all the variables in T for which isnumeric returns true and calls mean on those variables.
More Answers (1)
Image Analyst
on 4 Dec 2020
Did you try something like this (untested)
m = table2array(yourTable); % Convert table to regular matrix.
columnMeans = mean(m, 1); % Get the mean of each column in the matrix.
11 Comments
Image Analyst
on 8 Dec 2020
If you want only one workbook for all the results, do this:
% Specify the folder (directory) of CSV files that you want to process.
myFolder = '/Users/xxxxxxx/Desktop/Tests/27.11.2020 csv/Total';
% Get a wildcard pattern so we can get a list of all CSV files in the folder.
filePattern = fullfile(myFolder, '*.csv');
% Below is the code for looping over all the files, reading them in,
% computing the column means, and writing that to an output workbook
% (one output .XLSX file for each input .CSV file).
theFiles = dir(filePattern); % This is a structure.
% Make a 2-D array to hold all the column means
columnMeans = zeros(9, length(theFiles)); % One column for each file.
for k = 1: length(theFiles)
baseFileName = theFiles(k).name;
fullInputCSVFileName = fullfile(theFiles(k).folder, baseFileName);
fprintf('Processing %s...\n', fullInputCSVFileName);
% Read this matrix from the csv file.
thisMatrix = dlmread(fullInputCSVFileName,',',1,2);
% Get the means of each column.
theMeans = mean(thisMatrix,1);
% Convert from a row vector to a column vector because that's how he wants the output file.
columnMeans(:, k) = theMeans'; % Add this column vector to the 2-D array.
end
% Create a name for the output Excel workbook.
baseFileName = 'Column Means.xlsx'; % Whatever you want to call it
% Prepend the folder to get the full file name.
fullWorkBookFileName = fullfile(myFolder, baseFileName);
% Write the output workbook.
fprintf('Writing output Excel workbook : %s...\n', fullWorkBookFileName);
writematrix(columnMeans, fullWorkBookFileName)
% Alert user that we're done.
message = sprintf('Done processeing %d CSV files.\n', length(theFiles));
uiwait(msgbox(message));
See Also
Categories
Find more on Startup and Shutdown in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!