Usuwanie zduplikowanej ramki danych wierszy w R [zamknięte]

71

Jak mogę usunąć zduplikowane wiersze z tej przykładowej ramki danych?

A   1
A   1
A   2
B   4  
B   1
B   1
C   2
C   2

Chciałbym usunąć duplikaty na podstawie obu kolumn:

A   1
A   2
B   4
B   1
C   2

Porządek nie jest ważny.

Jana
źródło
@ Whuber nie powinien zostać przeniesiony do SO?
llrs
@Llopis Tak, ale jest już za późno, aby to zrobić - i było za późno, kiedy pierwotnie go zamknęliśmy. Tego rodzaju pytanie było rozważane (graniczne) na wiele lat temu, ale obecnie będzie szybko migrowane.
whuber

Odpowiedzi:

115

unique()rzeczywiście odpowiada na twoje pytanie, ale inną pokrewną i interesującą funkcją osiągnięcia tego samego celu jest duplicated().

Daje to możliwość sprawdzenia, które wiersze są duplikowane.

a <- c(rep("A", 3), rep("B", 3), rep("C",2))
b <- c(1,1,2,4,1,1,2,2)
df <-data.frame(a,b)

duplicated(df)
[1] FALSE  TRUE FALSE FALSE FALSE  TRUE FALSE  TRUE

> df[duplicated(df), ]
  a b
2 A 1
6 B 1
8 C 2

> df[!duplicated(df), ]
  a b
1 A 1
3 A 2
4 B 4
5 B 1
7 C 2
Rahul
źródło
2
Dziękujemy za wzmiankę o „zduplikowanej” funkcji. Można go użyć do usunięcia zduplikowanych wierszy na podstawie podzbioru kolumn.
Joko,
51

Szukasz unique().

a <- c(rep("A", 3), rep("B", 3), rep("C",2))
b <- c(1,1,2,4,1,1,2,2)
df <-data.frame(a,b)
unique(df)

> unique(df)
  a b
1 A 1
3 A 2
4 B 4
5 B 1
7 C 2
Bernd Weiss
źródło
1
Dzięki Bernd. Myślałem, że unikatowy można zastosować tylko do określonej kolumny. Nie wiedziałem, że można go również zastosować do całej ramki danych. jeszcze raz dziękuję
Jana