subtract rows under a condition
7 次查看(过去 30 天)
显示 更早的评论
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 个评论
回答(2 个)
JESUS DAVID ARIZA ROYETH
2018-5-4
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 个评论
Guillaume
2018-5-4
编辑:Guillaume
2018-5-4
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
2018-5-6
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 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Cell Arrays 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!