Hi
I have got 2 cells with 2 columns each:
IdxMembers(1636x2)
IdxMembers2(1630x2)
I am looking of the unique values of each cells in form of (nr. of unique values in first row x 2 columns)
I tried the following 2 codes:
unique(vertcat(IdxMembers,IdxMembers2),'rows')
and
unique(vertcat(IdxMembers,IdxMembers2))
I get the unique values in dim (nr. of unique values x 1 column). However, I would like get the output with the second column.
Do you have any suggestions?

7 Kommentare

madhan ravi
madhan ravi am 13 Sep. 2019
Mind sharing the data as .mat file??
BdS
BdS am 17 Sep. 2019
Hi Madhan
Enclosed you will find my data. I changed the variable names:
IdxMembers=old
IdxMembers2=new
With this formula unique(vertcat(old,new)) I am still not getting a cell with dimensions (nr. of unique values in first row x 2 columns) even if variables old and new have 2 columns.
Do you have any suggestions?
Guillaume
Guillaume am 17 Sep. 2019
Is the question resolved or not? You've accepted an answer but seem to still be asking something. if you're still asking something, what do you want as an output? A 1886x2 cell array whose first column is either 1 or 2 (n. of repeat) and 2nd column is the matching value from column2 of either input?
BdS
BdS am 17 Sep. 2019
Hi Guilaume,
this question is not solved. I am looking for the following output:
a cell array with the first column containing the unique values and 2nd column with their corresponding values. cell(nr. unique values x 2)
Thank you
I understand "containing the unique values" as containing for example:
column1 = {'1 HK Equity';
'10 HK Equity';
'101 HK Equity';
'1038 HK Equity';
'11 HK Equity';
...
};
I understand "nr. unique value" as the count of each unique value, so:
column1 = [2;
2;
1;
2;
...
];
so I'm confused as to what you want.
BdS
BdS am 17 Sep. 2019
I am sorry for the confusion.
I mean as your wrote in your first example. But with the corresponding value in column 1
Thanks
BdS
BdS am 17 Sep. 2019
The unique values should be based on the information based on column 1

Melden Sie sich an, um zu kommentieren.

 Akzeptierte Antwort

Matt J
Matt J am 13 Sep. 2019

0 Stimmen

I tried the following 2 codes: unique(vertcat(IdxMembers,IdxMembers2),'rows')... I get the unique values in dim (nr. of unique values x 1 column).
No, you really should have gotten 2 column output, as in the example below. Something about your situation must be different from what you are describing.
>> [IdxMembers,IdxMembers2] =deal( randi(3,4,2) , randi(3,3,2))
IdxMembers =
2 1
2 2
3 2
3 2
IdxMembers2 =
3 3
3 2
1 1
>> unique(vertcat(IdxMembers,IdxMembers2),'rows')
ans =
1 1
2 1
2 2
3 2
3 3

Weitere Antworten (1)

Guillaume
Guillaume am 17 Sep. 2019
Bearbeitet: Guillaume am 17 Sep. 2019

1 Stimme

merged = [new; old]; %simpler way to write vertcat(new, old)
[~, row] = unique(merged(:, 1)); %get row index of unique values in the 1st column
result = merged(row, :) %extract these rows

4 Kommentare

BdS
BdS am 17 Sep. 2019
Thank you. It worked. But why doesn't it work with just the code given by Matt J? I have other examples in which the coded worked well.
The 'rows' option of unique does not work with cell arrays. It gives you a warning if you try to do it (in my opinion, it should throw an error):
>> result = unique([new; old], 'rows');
Warning: The 'rows' input is not supported for cell array inputs.
> In cell/unique>celluniqueR2012a (line 236)
In cell/unique (line 148)
However, the 'rows' option does work with string arrays, so another option would be to convert your cell arrays of char vectors into string arrays (requires R2016b or later):
result = unique(string([new; old]), 'rows');
You can then keep working with the string array or if you really want to convert back to cell array:
resultcell = cellstr(result);
BdS
BdS am 18 Sep. 2019
thank you for your explanation.
Option 1 seems to more efficient: 0.007129 seconds in comparison with 0.028908
Guillaume
Guillaume am 18 Sep. 2019
Option 1 seems to more efficient: 0.007129 seconds
As long as you consider efficiency to be just the execution speed and that you care about a few milliseconds difference.
Indeed string arrays may have a slight speed impact but if you consider that if you'd used string arrays to start with your original code would have worked straight away but instead it took you 4 days to resolve the problem, in term of development time string arrays would have won hands down.

Melden Sie sich an, um zu kommentieren.

Kategorien

Gefragt:

BdS
am 13 Sep. 2019

Kommentiert:

am 18 Sep. 2019

Community Treasure Hunt

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

Start Hunting!

Translated by