Existing table, populate a column with string (receiving errors)

14 visualizzazioni (ultimi 30 giorni)
I have a table, and I want to populate every row in a specific column with the same string. I keep getting errors. Using Matlab R2018a, no fancy packages.
mytable = nan(5,2);
% I'm creating my table like this; it's actually much bigger, and most of the columns are numerical
% is there a better way to do this? the order of the column matters, and I don't want to have to add extra code to re-order
mytable = array2table(mytable);
mytable.Properties.VariableNames = {'colA', 'colB'};
mytable.colA(:) = 459; % just a random number, proof-of-concept that it works
mytable.colB(:) = {'words'}; % this throws errors
  2 Commenti
Thiago de Aquino Costa Sousa
Spostato: the cyclist il 18 Set 2022
I have something similar, I have a master table with more then 270k lines and 85 columns. I added to my master table one column with subject Id of my participants, wich I get from the name of my first level of subfolders, but I am not being able to populate every line with the subject Id, only the first line is being populated, can you help on that??? @Cris LaPierre or anyoner expert???
clear
clc
mytopfolder = '/Users/Participants data';
filepattern = fullfile(mytopfolder, '**/VIVE/Walking_ST/Trial_*.txt');
thefiles = dir(filepattern);
nfiles = length(thefiles);
for k = 1:nfiles
basefilename = thefiles(k).name;
fullfilename = fullfile(thefiles(k).folder, basefilename);
fprintf(1, 'Now reading %s\n', fullfilename);
thisTable = readtable(fullfilename);
thisTable.Subject_Id(k,:) = fullfilename(98:102);
fprintf(' It has %d rows in it.\n', height(thisTable));
if k == 1
masterTable = thisTable;
else
masterTable = [masterTable; thisTable];
end
fprintf(' Now there are a total of %d rows in the master table.\n', height(masterTable));
end
Cris LaPierre
Cris LaPierre il 19 Set 2022
This is probably best asked as a new question, as more people will see it. Quick observation, though, is that you are assigning the Subject_ID to the kth row, all columns. Perhaps you meant to assign to all rows?

Accedi per commentare.

Risposta accettata

Cris LaPierre
Cris LaPierre il 18 Nov 2019
You are close, but you are trying to assign a character vector to a double variable (NaN = not a number). You can see that if you run the command summary(mytable).
You also do not need to put the text into a cell if you use the string data type.
See if you can get this code to work for your needs.
myArray = nan(5,2)
mytable = array2table(myArray);
mytable.Properties.VariableNames = {'colA', 'colB'};
mytable2 = convertvars(mytable,"colB",'string');
mytable2.colA(:) = 459;
mytable2.colB(:) = "words"
You say you have a lot of data. If the variables already exist, you could do something like this:
colA = nan(5,1);
colB = strings(5,1);
mytable = table(colA,colB);
mytable.colA(:) = 459; % just a random number, proof-of-concept that it works
mytable.colB(:) = "words" % this throws errors
  4 Commenti

Accedi per commentare.

Più risposte (0)

Categorie

Scopri di più su Chemistry in Help Center e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by