How to fill table column value with string during creation?

62 views (last 30 days)
Hi all,
I am preparing calculated parameters into a table that will be appended to an excel file for eventual data analysis using R.
Each data set has four identifiers: sampletype, strain, scan, and samplenumber. The identifiers are single cells/characters. These identifiers are constant for the calculated parameters: peaks, width, localheight. The calculated parameters are doubles that are the same length (ranging from 1x5 to 1x9 depending on the data set).
I would like the data to look like this in the table:
sampletype strain scan samplenumber peaks width localheight
example 10 1 1 100 50 95
example 10 1 1 101 46 103
example 10 1 1 103 50 95
example 10 1 1 99 60 90
example 10 1 1 80 52 110
example 10 1 1 91 54 98
example 10 1 1 94 49 99
I want the single cells/characters to 'fill down' the column until the end of the double parameters length, which will change with every data set. So, after running two data sets the eventual excel file would look like:
sampletype strain scan samplenumber peaks width localheight
example 10 1 1 100 50 95
example 10 1 1 101 46 103
example 10 1 1 103 50 95
example 10 1 1 99 60 90
example 10 1 1 80 52 110
example 10 1 1 91 54 98
example 10 1 1 94 49 99
example 10 1 2 110 30 80
example 10 1 2 115 31 81
example 10 1 2 111 28 82
My current code is:
sampletype = string(test_name{1});
strain = string(test_name{2});
scan = string(test_name{3});
samplenumber = string(txt{1,1});
% Change the parameter rows into parameter columns
peaks=peaks';
width=width';
localheight=localheight'
sample_table = table(sampletype,strain,scan,samplenumber,peaks,width,localheight);
writetable(sample_table,'sample_sizes.xlsx')
Not surprisingly, I get the following error:
Error using table (line 231)
All table variables must have the same number of rows.
I cant figure out how to make a table and filling down a column with a specfic value. I found "missingvalue" but it seems I need to create a table to use the function, and I can't even make a table. Any advice is appreciated!

Accepted Answer

Deepak Gupta
Deepak Gupta on 3 Dec 2020
Edited: Deepak Gupta on 3 Dec 2020
Hi Sara,
From what i understand you want to create table, and want to populate first column values for all rows.
Here is a piece of code to help you do that. I have generated table with cell instead of a perticular data type because cell can hold any data type hence we don't need to specify type of the value we are going to store in it.
peaks = 1:10; % Just for demonstration. It can be any vector.
numRows = length(peaks); % Calculate the number of rows required in the table. It's not necessory though,
%We can generate an empty table with just properties names and fill it later.
myTable = cell2table(cell(numRows,7)); %Generate table with required rows and columns
myTable.Properties.VariableNames = {'sampletype', 'strain', 'scan', 'samplenumber',...
'peaks', 'width', 'localheight'}; %Give variable names
myTable(:, 1) = cellstr(repmat(string(10), numRows, 1)); % Now assign the values to the columns. Here
%string(10) can be replaced by respective column value. i.e. string(test_name{1})
Hope this helps.
Cheers,
Deepak
  3 Comments
Deepak Gupta
Deepak Gupta on 3 Dec 2020
Hi Sara,
As you don't need to replicate elements for your variable columns hence you don't need to use repmat. Assuming your variable columns are row vector, you can simply use.
myTable.peaks = peaks';
Same you can do for other columns.
Note: you can use dot(.) method for your populated columns also i.e.
myTable.sampletype = repmat(sampletype, numRows, 1);
Cheers,
Deepak
Sara Heedy
Sara Heedy on 3 Dec 2020
Hi Deepak,
Perfect! This is exactly what i need. This will streamline data analysis greatly.
Cheers!!
Sara

Sign in to comment.

More Answers (0)

Categories

Find more on Tables 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!