Reorder table variables / columns

I've created a table from a large csv file using the readtable function. I want to reorder the variables / columns in this table.
For example.
My table's name is CUTable
It has a variable CUTable.Date which is the date the data was taken It is currently column 20 in the table. I want to make it column 2 and shift existing columns 2-19 to 3-20.
It seems there should be a very easy command to do this which I'm missing, but I can't seem to find it anywhere in the help or these forums. I could, but don't want to "brute force" it (e.g. create a new table, and one-by-one copy the variables from the exiting table to the new table in the order I want, then delete the old table) if avoidable.
How can I accomplish this?

 Respuesta aceptada

Geoff Hayes
Geoff Hayes el 18 de Sept. de 2014
Editada: Geoff Hayes el 18 de Sept. de 2014
Alan - you can try the following to move the 20th column to the second position
CUTable = [CUTable(:,1) CUTable(:,20) CUTable(:,2:19)];
It isn't as elegant as a simple "move column command" but it should do what you want. In the following example, I inserted the last column in before the second (note that I use end here rather than the last column number)
load patients;
T = table(Age,Diastolic,Gender,Height,LastName,Location,...
SelfAssessedHealthStatus,Smoker,Systolic,Weight)
T = [T(:,1) T(:,end) T(:,2:end-1)]

3 comentarios

Alan
Alan el 18 de Sept. de 2014
Thank you very much for the quick reply, Geoff. One thing I found really helpful about your code is the use of the end value - so now I know if I make a new variable/column (which will always be end), I can relocate THAT column to whatever column I wish using your code. So you have helped me with another related problem I was having. Thank You very much.
I can extrapolate your code to be able to move any arbitrary column I want. Thank You!
Ole
Ole el 30 de Oct. de 2014
Editada: Ole el 30 de Oct. de 2014
You can also use the Workspace browser to modify your table by hand. The useful thing is that Matlab shows you the commands it performs for each action. For example when rearranging columns it does:
T=table; T.x=1; T.y=2; % setup demo table
T=T(:,[2 1]); % rearrange x and y columns
For the above example by Geoff Hayes that would be
T = T(:,[1 end 2:end-1])
which is apparently the way you are supposed to do it.
Peter Perkins
Peter Perkins el 21 de Feb. de 2018
Editada: Peter Perkins el 21 de Feb. de 2018
Yes, for a simple rearrangement, what Ole suggests is the best way. In some cases, it will be more readable use variable names, something such as
T = array2table(rand(10,3),'VariableNames',{'x' 'y' 'z'})
T = T(:,{'z' 'y' 'x'})
but with more than a handful of variables, probably using numbers is more readable.

Iniciar sesión para comentar.

Más respuestas (2)

Eric Sofen
Eric Sofen el 28 de Mzo. de 2018

9 votos

In R2018a, check out the new movevars function for rearranging variables in tables. It's part of a set of new functions for manipulating table variables:
Ben Oeveren
Ben Oeveren el 21 de Feb. de 2018
Editada: Ben Oeveren el 21 de Feb. de 2018
Or you can use:
oldvariables = T.Properties.VariableNames;
newvariables = {'date','Title','Website'};
[~,LOCB] = ismember(oldvariables,newvariables);
newTable = T(:,LOCB);

1 comentario

Hi Ben,
I like this solution, but there's a typo in the third line. I believe it should read as:
oldvariables = T.Properties.VariableNames;
newvariables = {'date','Title','Website'};
[~,LOCB] = ismember(newvariables,oldvariables);
newTable = T(:,LOCB);

Iniciar sesión para comentar.

Categorías

Más información sobre Data Type Identification en Centro de ayuda y File Exchange.

Productos

Preguntada:

el 18 de Sept. de 2014

Comentada:

el 17 de Nov. de 2023

Community Treasure Hunt

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

Start Hunting!

Translated by