2010-05-24 2 views
20

Angenommen, ich habe ein Datenrahmen df mit zwei oder mehr Spalten, gibt es eine einfache Möglichkeit, unique() oder andere R-Funktion zu verwenden, um eine Untergruppe von einzigartigen Kombinationen von zwei zu erstellen oder mehr Spalten?R Äquivalent von SELECT DISTINCT auf zwei oder mehr Felder/Variablen

Ich weiß, ich kann sqldf() verwenden und schreiben Sie eine einfache "SELECT DISTINCT var1, var2, ... varN" Abfrage, aber ich bin auf der Suche nach einem R Weg dies zu tun.

Es fiel mir ein, ftable zu einem Datenrahmen und verwenden Sie die Feldnamen gezwungen, um zu versuchen, aber ich habe auch die Kreuztabellierungen von Kombinationen, die im Datensatz existieren nicht:

uniques <- as.data.frame(ftable(df$var1, df$var2)) 

Antwort

34

unique Werke auf data.frame so sollte unique(df[c("var1","var2")]) sein, was Sie wollen.

Eine weitere Option ist distinct von dplyr package:

df %>% select(var1, var2) %>% distinct 

(oder ältliche Weise distinct(select(df, var1, var2))). diese

-2

Um alle anderen Variablen in df Verwendung zu HALTEN:

unique_rows <- !duplicated(df[c("var1","var2")]) 

unique.df <- df[unique_rows,] 

Eine andere, weniger empfohlene Methode ist row.names() # (siehe David Kommentar unten) mit:

unique_rows <- row.names(unique(df[c("var1","var2")])) 

unique.df <- df[unique_rows,] 
+2

Nr reihenabfahrenden Betrieb Namen sind immer eine schlechte Idee. Verwenden Sie 'duplicated', wenn Sie einen booleschen Vektor haben möchten. –

+0

Ich bin nicht sicher, warum es abgelehnt wurde :) – sbaniwal

+0

Weil Sie Ihre Antwort bearbeitet haben, ohne jede Notiz/Beitrag hinzuzufügen. Also wusste niemand, dass du deine Antwort tatsächlich festgelegt hast. –

0

@ Marek Antwort ist offensichtlich richtig, kann aber veraltet sein. Die aktuelle Version (0.7.4) ermöglicht einen noch einfacheren Code:

einfach verwenden:

df %>% distinct(var1, var2) 

Wenn Sie alle Spalten halten mögen, fügen Sie

df %>% distinct(var1, var2, .keep_all = TRUE)