Deleting certain rows with partially duplicate values

6 Ansichten (letzte 30 Tage)
Charles
Charles am 12 Mär. 2024
Kommentiert: Voss am 13 Mär. 2024
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.

Antworten (1)

Voss
Voss am 12 Mär. 2024
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 Kommentare
Charles
Charles am 13 Mär. 2024
Bearbeitet: Charles am 13 Mär. 2024
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 am 13 Mär. 2024
You should be deleting rows from TUnique instead of T.
Can you upload the xlsx file? Without the data, I can only guess.

Melden Sie sich an, um zu kommentieren.

Produkte


Version

R2022b

Community Treasure Hunt

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

Start Hunting!

Translated by