дубликаты в нескольких столбцах

У меня такой фрейм данных

> df abcd 1 1 2 A 1001 2 2 4 B 1002 3 3 6 B 1002 4 4 8 C 1003 5 5 10 D 1004 6 6 12 D 1004 7 7 13 E 1005 8 8 14 E 1006 

Я хочу удалить строки, где повторяются значения в столбце c И столбце d. Таким образом, в этом примере строки 2,3,5 и 6 будут удалены.

Я использовал это, которое работает:

 df[!(df$c %in% df$c[duplicated(df$c)] & df$d %in% df$d[duplicated(df$d)]),] >df abcd 1 1 2 A 1001 4 4 8 C 1003 7 7 13 E 1005 8 8 14 E 1006 

но это кажется неуклюжим, и я не могу не думать, что есть лучший способ. Какие-либо предложения?

В случае, если кто-то хочет воссоздать кадр данных, это dput:

 df = structure(list(a = c(1, 2, 3, 4, 5, 6, 7, 8), b = c(2, 4, 6, 8, 10, 12, 13, 14), c = structure(c(1L, 2L, 2L, 3L, 4L, 4L, 5L, 5L), .Label = c("A", "B", "C", "D", "E"), class = "factor"), d = c(1001, 1002, 1002, 1003, 1004, 1004, 1005, 1006)), .Names = c("a", "b", "c", "d"), row.names = c(NA, -8L), class = "data.frame") 

Он работает, если вы дважды используете duplicated :

 df[!(duplicated(df[c("c","d")]) | duplicated(df[c("c","d")], fromLast = TRUE)), ] abcd 1 1 2 A 1001 4 4 8 C 1003 7 7 13 E 1005 8 8 14 E 1006 

Создайте новый объект с двумя столбцами:

 df_dups <- df[c("c", "d")] 

Теперь примените его к вашему основному df:

 df[!duplicated(df_dups),] 

Выглядит более аккуратно и легко видеть / изменять столбцы, которые вы используете.

Давайте будем гением компьютера.