55 Stimmen

Doppelte Zeilen (basierend auf 2 Spalten) in Data Frame in R finden

Ich habe einen Datenrahmen in R, der wie folgt aussieht:

| RIC    | Date                | Open   |
|--------|---------------------|--------|
| S1A.PA | 2011-06-30 20:00:00 | 23.7   |
| ABC.PA | 2011-07-03 20:00:00 | 24.31  |
| EFG.PA | 2011-07-04 20:00:00 | 24.495 |
| S1A.PA | 2011-07-05 20:00:00 | 24.23  |

Ich möchte wissen, ob es irgendwelche Duplikate in Bezug auf die Kombination von RIC und Datum gibt. Gibt es dafür eine Funktion in R?

2voto

Peter Geissert Punkte 21

Ich denke, was Sie suchen, ist eine Möglichkeit, einen Datenrahmen der duplizierten Zeilen im gleichen Format wie Ihre ursprünglichen Daten zurückzugeben. Es gibt wahrscheinlich einen eleganteren Weg, dies zu tun, aber dies funktioniert:

dup <- data.frame(as.numeric(duplicated(df$var))) #creates df with binary var for duplicated rows
colnames(dup) <- c("dup") #renames column for simplicity
df2 <- cbind(df, dup) #bind to original df
df3 <- subset(df2, dup == 1) #subsets df using binary var for duplicated`

0voto

terraviva Punkte 1

Fand eine ziemlich meisterhafte Idee veröffentlicht von Steve Lianouglou die zur Lösung dieses Problems beiträgt und den großen Vorteil hat, dass die Wiederholungen indiziert werden:

Wenn Sie eine hash Spalte, in der Sie die beiden Spalten, für die Sie Duplikate prüfen wollen, verketten, können Sie dann dplyr::n() zusammen mit seq um jedem doppelten Vorkommen einen Index wie folgt zu geben

dat %>% mutate(hash = str_c(RIC, Date)) %>%
  group_by(hash) %>% 
  mutate(duplication_id = seq(n()) %>%
 ungroup ()

Ihre Kolumne duplication_id sagt Ihnen, wie viele identische Zeilen (gleiche Zeilenwerte für beide Spalten) es in Ihrer Tabelle über der indizierten gibt. Ich habe dies verwendet, um doppelte Ids zu entfernen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X