subtract rows under a condition
4 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
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
0 commentaires
Réponses (2)
JESUS DAVID ARIZA ROYETH
le 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 commentaires
Guillaume
le 4 Mai 2018
Modifié(e) : Guillaume
le 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, :);
Guillaume
le 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{:})
0 commentaires
Voir également
Catégories
En savoir plus sur Cell Arrays dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!