How to extract table data based on column values?

109 ビュー (過去 30 日間)
Atanu
Atanu 2022 年 3 月 17 日
回答済み: Atanu 2022 年 3 月 17 日
I have a table, part of which is displayed. I have attached the table in the question. The entries of the tables are 1*1 cell array.
I am trying to extract all the rows based on 'date'.
test_data((cell2mat(test_data.date) == '02/10/2022', :)
It gives me error "Row index exceeds table dimensions." I also get error for 'subjectid' or 'mazenumber' column.
But it works for "feeder" column.
>> test_data(cell2mat(test_data.feeder) == '4',:)
How do I fix this?

採用された回答

Eric Sofen
Eric Sofen 2022 年 3 月 17 日
One thing to watch out for is that the char vectors contained in the cell arrays (celltrs) can vary in the number of characters, causing cell2mat to fail. As @Jon suggested, strcmp between your char vector of interest and the cellstr variable is going to be much more robust.
Going a step further, it may make sense to convert some of your variables to more "modern" types:
subjectid - string
mazenumber - categorical
feeder - categorical or double
date - datetime
That said, depending on what you're doing with the data and how you're interacting with the database, it may not make sense to do the conversion.
  1 件のコメント
Atanu
Atanu 2022 年 3 月 17 日
編集済み: Atanu 2022 年 3 月 17 日
Hi Eric! Thanks for your response. I have attached the in the original question. I tried using 'strcmp', But that did not work either. Both the elements I am comparing are 'char' vector.
>> cell2mat(test_data.mazenumber(1))
ans =
'maze 2'
>> class(cell2mat(test_data.mazenumber(1)))
ans =
'char'
>> class('maze 2')
ans =
'char'
>> test_data(strcmp(cell2mat(test_data.mazenumber),'maze 2',:));
Unrecognized function or variable 'strcmp'. % getting this error
I'll try to convert the variables now and see if that works.

サインインしてコメントする。

その他の回答 (2 件)

Jon
Jon 2022 年 3 月 17 日
Could be you should be using strcmp rather than == to compare the strings
It's a little hard to know exactly how you have the data stored in the table.
Please save your table using
save test_data.mat test_data
and attach the resulting test_data.mat so we can see what is going on.
  1 件のコメント
Atanu
Atanu 2022 年 3 月 17 日
編集済み: Atanu 2022 年 3 月 17 日
Hi Jon! Thanks for your response. I have attached the in the original question.

サインインしてコメントする。


Atanu
Atanu 2022 年 3 月 17 日
Thanks everyone for your comments. The problem is fixed now. I used the following code to get around.
test_data.date = datetime(test_data.date, 'InputFormat','MM/dd/yyyy');
all_trials_on_test_data = test_data((test_data.date) == '10-Feb-2022',:);

カテゴリ

Help Center および File ExchangeTables についてさらに検索

タグ

製品


リリース

R2022a

Community Treasure Hunt

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

Start Hunting!

Translated by