How do I delete a row in a table containing certain text?

조회 수: 12 (최근 30일)
Nina Nikolova
Nina Nikolova 2019년 1월 22일
편집: Jan 2021년 1월 27일
Hi, I am very new to MATLAB and I have been reading all the help and I do not understand where my code is wrong. I need to simply delete a row of my table 'indices' which contains the text 'Totals:'.
Below is an excerpt of my table 'indices' (originally 18x9) and I want to delete the row with the Total:, i.e the last row (or row 18).
CalendarYear Premium
'2017' 35216284
'2018' 36432973
'2019' 37895599
'Total:' 428730614
I tired several things in order to find the row number or the location where the word Total is without success:
1.
>> isequal(indices.CalendarYear,'Total:')
ans =
logical
0
2.
>> strcmp(indices(:,1),'Total:')
ans =
logical
0
3. This gives me a logical output but then I do not know how to continue using it
>> strfind(indices.CalendarYear,'Total:')
ans =
18×1 cell array
{0×0 double}
.........
{[ 1]} %finally a positive answer
none of these attempts gives me the row number 18 which I wold like to delete form my table.
What am I missing?
Thank you in advance,
ni7

채택된 답변

Jan
Jan 2019년 1월 22일
편집: Jan 2021년 1월 27일
You are almost there.
isequal(indices.CalendarYear, 'Total:')
This tests, if indices.CalenderYear is equal to the char vector 'Total:'. This cannot be equal.
strcmp(indices(:,1), 'Total:')
This is almost working. Use braces instead
strcmp(indices{:,1}, 'Total:')
% Or to get the index:
find(strcmp(indices{:,1}, 'Total:'))
Or equivalently (I prefer this!):
find(strcmp(indices.CalendarYear, 'Total:'))
The command:
strfind(indices.CalendarYear, 'Total:')
searchs, where the part 'Total:' appears, not if the string equals this exactly. But as long as you do not have a 'not Total:' anywhere, this would work also:
find(~cellfun('isempty', strfind(indices.CalendarYear, 'Total:'))) % [TYPO FIXED]
[EDITED] Use contains in modern Matlab versions:
find(contains(indices.CalendarYear, 'Total:'))
  댓글 수: 2
Nina Nikolova
Nina Nikolova 2019년 1월 22일
편집: Nina Nikolova 2019년 1월 22일
Thank you, @Jan, for the educational answer. I still need to understand better the concept of the different brackets and braces. The solution worked perfect!
Stefan Grandl
Stefan Grandl 2021년 1월 26일
Perfect answer, thanks!
Just a remark: in Jan's last answer there is a final parenthesis missing at the end. It should be:
find(~cellfun('isempty', strfind(indices.CalendarYear, 'Total:')))

댓글을 달려면 로그인하십시오.

추가 답변 (2개)

Luna
Luna 2019년 1월 22일
Hi Nina,
You can use this code below:
myTable = table({'2017','2018','2019','Total:'}',[35216284,36432973,37895599,428730614]','VariableNames',{'CalendarYear','Premium'});
reducedTable = myTable(~contains(myTable.CalendarYear,'Total:'),:);
  댓글 수: 5
Nina Nikolova
Nina Nikolova 2019년 1월 22일
편집: Nina Nikolova 2019년 1월 22일
Dear @Luna, thank you for showing another efficient way, this is all so beneficial for my learning!
Luna
Luna 2019년 1월 22일
Your welcome :)

댓글을 달려면 로그인하십시오.


madhan ravi
madhan ravi 2019년 1월 22일
Another possibility using regexp but not as effective as the above two answers:
k=cellfun(@(x)regexp(x,'Total:'),T.CalendarYear,'un',0) % T is your table
T(~cellfun(@any,k),:)

카테고리

Help CenterFile Exchange에서 Tables에 대해 자세히 알아보기

태그

Community Treasure Hunt

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

Start Hunting!

Translated by