Относительно вашего редактирования в конце вопроса:
Обновление: или, при удалении дубликата, оставляйте только второе наблюдение (4-й ряд).
примечание что в случае, если упорядочение строк по col3
определяет, что строка , которую нужно сохранить, всегда является последней среди повторяющихся записей, вы можете просто установить fromLast=TRUE
в функции duplicated()
для запроса что строки должны быть помечены как дубликаты , начиная отсчет дубликатов с последней найденной для каждой дублирующейся группы.
Использование слегка измененной версии ваших данных (где я добавил больше дублирующих групп, чтобы лучше покажите, что процесс работает в более общем случае):
a <- c(1,1,2,3,3,3,7)
b <- c(4,4,5,6,6,6,8)
c <- c("excluded", "red","green","excluded", "excluded","orange","excluded")
d <- data.frame(a,b,c)
a b c
1 1 4 excluded
2 1 4 red
3 2 5 green
4 3 6 excluded
5 3 6 excluded
6 3 6 orange
7 7 8 excluded
, используя:
ind2remove = duplicated(d[,c("a", "b")], fromLast=TRUE)
(d_noduplicates = d[!ind2remove,])
, мы получаем:
a b c
2 1 4 red
3 2 5 green
6 3 6 orange
7 7 8 excluded
Обратите внимание, что это не так требуется, чтобы строки в каждой дублирующейся группе были все вместе в исходных данных. Единственная важная вещь - это то, что вы хотите сохранить запись, отображающуюся последней в данных из каждой дублирующейся группы.