subtract rows under a condition

5 Ansichten (letzte 30 Tage)
Boram Lim
Boram Lim am 3 Mai 2018
Beantwortet: Guillaume am 6 Mai 2018
I am trying to create a data by subtracting rows that meet a condition. A sample of my data is this
dataA =
id value
1 1
1 2
1 3
1 4
2 5
2 6
2 7
3 8
3 9
3 10
4 11
4 12
4 13
5 14
5 15
5 16
I have a vector this
my_vector =
1
3
4
1
With data A, I would like to subtract rows that are only included in my_vector. In my_vector, there are two 1 so I would like to subtract rows with id 1 twice. So, here is what I want to have
id value
1 1
1 2
1 3
1 4
3 8
3 9
3 10
4 11
4 12
4 13
1 1
1 2
1 3
1 4

Antworten (2)

JESUS DAVID ARIZA ROYETH
JESUS DAVID ARIZA ROYETH am 4 Mai 2018
solution:
dataA = [1 1
1 2
1 3
1 4
2 5
2 6
2 7
3 8
3 9
3 10
4 11
4 12
4 13
5 14
5 15
5 16];
my_vector =[ 1
3
4
1];
[x,~]=find(bsxfun(@eq, dataA(:,1),my_vector'));
newdataA=dataA(x,:);
  5 Kommentare
Guillaume
Guillaume am 4 Mai 2018
Bearbeitet: Guillaume am 4 Mai 2018
There is never any raison to use table2array to extract a column from a table, table2array(dataA(:, 1)) is a roundabout way of getting:
dataA{:, 1}
or using . indexing:
data.id
Overall, a simpler version for R2016b or later:
[rows, ~] = find(dataA.id == my_vector');
newdataA = dataA(rows, :);
Boram Lim
Boram Lim am 5 Mai 2018
Since the size of data is too large, there is such an error
Out of memory. Type HELP MEMORY for your options.
Error in Model01_interpolated_May1 (line 70) [rows, ~] = find(dta2.decision_id == sampled_id01');

Melden Sie sich an, um zu kommentieren.


Guillaume
Guillaume am 6 Mai 2018
Since the size of data is too large
Then you'll have to use a loop, explicitly or with arrayfun:
newdataA = arrayfun(@(v) dataA(ismember(dataA.id, v), :), my_vector, 'UniformOutput', false);
newdataA = vertcat(newdataA{:})

Kategorien

Mehr zu Cell Arrays finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by