How to take last entry of each unique name

5 views (last 30 days)
Hi,
I have below cell array,
2018-1-2 MDS09FG HTF03K00E4T00 TF0224.1 34 43
2018-1-2 MDS09FG HTF03K00E4T00 TF0224.1 54 2
2018-1-2 MDS09FG HTF03K00E4T00 VF0224.1 64 2.6
2018-1-2 UDS09FG HTF06K00E4T00 TF0674.1 3 36
2018-1-2 UDS09FG HTF06K00E4T00 TF0674.1 54 4.3
2018-1-2 UDS09FG HTF06K00E4T00 TF0674.1 64 2.9
2018-1-2 UDS09FG HTF06K00E4T00 TF0674.1 64 2.9
2018-4-23 GJS09FG HTF06K00E4T00 TF0864.1 3 41
2018-4-23 GJS09FG HTF06K00E4T00 TF0864.1 54 1.3
2018-4-23 GJS09FG HTF06K00E4T00 TF0864.1 64 29
Based on 4th column, for each unique name in 4th column, there will be 3 to 4 rows with the same name in 4th column, I want to take the last entry(row) for each unique name in 4th column. Desired output:
2018-1-2 MDS09FG HTF03K00E4T00 VF0224.1 64 2.6
2018-1-2 UDS09FG HTF06K00E4T00 TF0674.1 64 2.9
2018-4-23 GJS09FG HTF06K00E4T00 TF0864.1 64 29
  4 Comments
Stephen23
Stephen23 on 7 May 2018
Edited: Stephen23 on 7 May 2018
Your example output shows rows. When I check the cell array I found four unique names in the fourth column:
>> unique(C(:,4))
ans =
TF0224.1
TF0674.1
TF0864.1
VF0224.1
What is the correct required output?
Mekala balaji
Mekala balaji on 10 Jun 2018
Edited: Stephen23 on 10 Jun 2018
Sir,
I encounter an issue, my out does not maintain original order, in fact, I want to retain the original row order.
Can it be possible to retain the original order. I legacy, but still I get wrong ordre:
ia =
1
3
8
11
[C,ia,ic] = unique(input(:,4),'rows','legacy')

Sign in to comment.

Accepted Answer

Fangjun Jiang
Fangjun Jiang on 7 May 2018
use [out, IA]=unique(in,'last'), assume your 2D cell array is in,
[out,IA]=unique(in(:,4),'last')
out=in(IA,:)

More Answers (0)

Community Treasure Hunt

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

Start Hunting!