Extract data based on columns

8 次查看(过去 30 天)
novice modeler
novice modeler 2017-6-4
回答: Guillaume 2017-6-5
Altruists,
I have the data in the following matrix.
Year month value
2000 1 10
2000 2 20
2000 3 30
I have to extract this values to the following matrix in repetition, for example:
Year month value
2000 1 ?
2000 1 ?
2000 2 ?
Thanks

回答(2 个)

Walter Roberson
Walter Roberson 2017-6-5
编辑:Walter Roberson 2017-6-5
YourMatrix = [2000 1 10
2000 2 20
2000 3 30];
probe_rows = [2000 1
2000 1
2000 2];
[uniqYM, ~, uniq_rowidx] = unique(YourMatrix(:,1:2), 'rows', 'stable');
[tf, index_in_uniqYM] = ismember(probe_rows, uniqYM, 'rows');
valid_idx_in_uniqYM = index_in_uniqYM(tf);
output = YourMatrix( ismember(uniq_rowidx, valid_idx_in_uniqYM), :);
Note: this code was specifically designed with the possibility that the year and month entries in the original matrix might not be unique, that you might need to retrieve multiple rows.
  2 个评论
novice modeler
novice modeler 2017-6-5
Thanks for the reply. Actually, the original matrix contains no repetitive entries but the matrix in problem requires to retrieve repetitive entries. Would you please let me know your answer for this.
Walter Roberson
Walter Roberson 2017-6-5
YourMatrix = [2000 1 10
2000 2 20
2000 3 30];
probe_rows = [2000 1
2000 1
2000 2];
[tf, index_in_original] = ismember(probe_rows, YourMatrix(:, [1 2]), 'rows');
output = YourMatrix( index_in_original(tf), : );

请先登录,再进行评论。


Guillaume
Guillaume 2017-6-5
If your matrices are actually tables as your formatting sort of imply, then it's trivially done with join or outerjoin (depending on whether or not you want to include rows that don't match:
%inputs as table:
data = table([2000; 2000; 2000], [1; 2; 3], [10; 20; 30], 'VariableNames', {'year', 'month', 'value'})
probe = table([2000; 2000; 2000], [1; 1; 2], 'VariableNames', {'year', 'month'});
%include only rows that match
result = join(probe, data)
%include rows of probe that do not match
result = outerjoin(probe, data, 'Type', 'left');
If your inputs are actually matrices, then convert them to tables or use Walter's answer.

类别

Help CenterFile Exchange 中查找有关 Tables 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by