How to separate a table into sub-tables by unique categories?

11 visualizaciones (últimos 30 días)
Erin Winkler
Erin Winkler el 17 de Sept. de 2018
Comentada: Guillaume el 17 de Sept. de 2018
Hi all,
I have a table with the following categories:
(1) Date (as Datetime)
(2) Location (as string)
(3) Value (as integer)
I want to separate the table into multiple tables based on location. So if I have location = 'Utah', 'California', 'Washington', then I want three tables where the only location is the one it was filtered by.
So, basically, I want tables containing all of the information for the individual locations.
Let's say I have a table T with 10 rows and 3 locations where location 1 has 2 rows, location 2 has 4 rows, and location 3 has 4 rows. How would I write code to get 3 tables (2x3, 4x3, 4x3)?
Thank you!
  9 comentarios
Erin Winkler
Erin Winkler el 17 de Sept. de 2018
Just kidding, answered my own question. It was categorical strings, not strings so I fixed it using char. Thanks!
Guillaume
Guillaume el 17 de Sept. de 2018
I fixed it using char
Which is the wrong way to fix it (slow). Comparison with categorical is done with ==, not strcmp.
T.Location == 'Utah'
However, the whole approach is wrong. As I've demonstrated in my answer, Matlab has much better tools to perform calculation per location, for all locations in one go. Details of what exactly you want to do would allow me to refine my answer.

Iniciar sesión para comentar.

Respuestas (1)

Guillaume
Guillaume el 17 de Sept. de 2018
As said, it is much easier to calculate statistics by location if you don't split the table. You don't need to filter the table according to a given city either. For example, to calculate the mean of value for each location, this is trivially done:
%demo table according to your description
T = table(repelem({'Utah'; 'California'; 'Washington'}, [2 4 4]), randi(20, 10, 1), 'VariableNames', {'Location', 'Value'})
LocationMean = varfun(@mean, T, 'InputVariables', 'Value', 'GroupingVariables', 'Location')
Try doing that in one line, if you've split the table in multiple tables.

Categorías

Más información sobre Creating and Concatenating Matrices en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by