Deleting certain rows with partially duplicate values

3 ビュー (過去 30 日間)
Charles
Charles 2024 年 3 月 12 日
コメント済み: Voss 2024 年 3 月 13 日
If two rows have matching values in column A and in column B, I need to delete the row with the value RED. For example:
A B C D
1 March-1st 2 RED
1 March-1st 3 GREEN
3 March-5th 8 GREEN
6 March-8th 4 GREEN
2 April-3rd 5 RED
2 April-3rd 0 GREEN
Here I would need to delete row 1 and 5 beacuse they have the value RED in column D while they share values in column A and B with another row.

回答 (1 件)

Voss
Voss 2024 年 3 月 12 日
I'll assume that's a table and the text entries are strings.
T = table( ...
[1;1;3;6;2;2], ...
["March-1st";"March-1st";"March-5th";"March-8th";"April-3rd";"April-3rd"], ...
[2;3;8;4;5;0], ...
["RED";"GREEN";"GREEN";"GREEN";"RED";"GREEN"], ...
'VariableNames',["A","B","C","D"])
T = 6×4 table
A B C D _ ___________ _ _______ 1 "March-1st" 2 "RED" 1 "March-1st" 3 "GREEN" 3 "March-5th" 8 "GREEN" 6 "March-8th" 4 "GREEN" 2 "April-3rd" 5 "RED" 2 "April-3rd" 0 "GREEN"
[G,GID] = findgroups(T.A,T.B);
is_red = strcmp(T.D,"RED");
delete_row = false(size(T,1),1);
for ii = 1:numel(GID)
idx = G == GID(ii);
if nnz(idx) == 1
continue
end
delete_row(idx & is_red) = true;
end
T(delete_row,:) = []
T = 4×4 table
A B C D _ ___________ _ _______ 1 "March-1st" 3 "GREEN" 3 "March-5th" 8 "GREEN" 6 "March-8th" 4 "GREEN" 2 "April-3rd" 0 "GREEN"
  7 件のコメント
Charles
Charles 2024 年 3 月 13 日
編集済み: Charles 2024 年 3 月 13 日
I can not upload my table, but it is read from Excel, and then I used the unique function to delete all exact duplicate rows. TUnique is >800 rows.
T = readtable('Table.xlsx');
TUnique = unique(T);
Voss
Voss 2024 年 3 月 13 日
You should be deleting rows from TUnique instead of T.
Can you upload the xlsx file? Without the data, I can only guess.

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeSpreadsheets についてさらに検索

製品


リリース

R2022b

Community Treasure Hunt

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

Start Hunting!

Translated by