R duplicated
zwraca wektor pokazujący, czy każdy element wektora lub ramki danych jest duplikatem elementu z mniejszym indeksem dolnym. Więc jeśli wiersze 3, 4 i 5 5-rzędowej ramki danych są takie same, duplicated
da mi wektor
FALSE, FALSE, FALSE, TRUE, TRUE
Ale w tym przypadku faktycznie chcę dostać
FALSE, FALSE, TRUE, TRUE, TRUE
to znaczy chcę wiedzieć, czy wiersz jest zduplikowany przez wiersz z większym indeksem dolnym.
r
duplicates
r-faq
Lauren Samuels
źródło
źródło
x <- c(1:9, 7:10, 5:22); y <- c(letters, letters[1:5]); test <- data.frame(x, y); test[duplicated(test$x) | duplicated(test$x, fromLast=TRUE), ]
Zwróciłem wszystkie trzy kopie 7, 8 i 9. Dlaczego to działa?duplicated(c(1,1,1))
vsduplicated(c(1,1,1,), fromLast = TRUE)
dajec(FALSE,TRUE,TRUE)
ic(TRUE,TRUE,FALSE)
. Średnia wartość jestTRUE
w obu przypadkach. Biorąc|
oba wektory dajec(TRUE,TRUE,TRUE)
.Musisz zebrać zestaw
duplicated
wartości, zastosowaćunique
, a następnie przetestować z%in%
. Jak zawsze, przykładowy problem ożywi ten proces.źródło
duplicated
,unique
i%in%
można łatwo uogólnić na dataframe jeśliby najpierwpaste
każdy wiersz o nietypowym charakterze separatora. (Zaakceptowana odpowiedź jest lepsza.)Miałem to samo pytanie i jeśli się nie mylę, to też jest odpowiedź.
Nie wiem, który z nich jest szybszy, jednak zestaw danych, którego obecnie używam, nie jest wystarczająco duży, aby wykonać testy, które powodują znaczne przerwy czasowe.
źródło
vec
zarówno wektor atomowy, jak i ramkę danych. Podejrzewam, że z rzeczywistą ramką danych to by się nie udało.Zduplikowane wiersze w ramce danych można uzyskać
dplyr
wykonującAby wykluczyć określone kolumny,
group_by_at(vars(-var1, -var2))
można zamiast tego użyć grupowania danych.Jeśli faktycznie potrzebne są indeksy wierszy, a nie tylko dane, możesz je najpierw dodać, jak w:
źródło
n()
. Nie zapomnij rozgrupować wynikowej ramki danych.Oto rozwiązanie @Joshua Ulricha jako funkcja. Ten format umożliwia użycie tego kodu w taki sam sposób, w jaki używałbyś duplicated ():
Korzystając z tego samego przykładu:
źródło
Jeśli interesuje Cię, które wiersze są zduplikowane w niektórych kolumnach, możesz zastosować podejście plyr :
Dodawanie zmiennej zliczającej za pomocą dplyr :
W przypadku zduplikowanych wierszy (biorąc pod uwagę wszystkie kolumny):
Zaletą tych podejść jest to, że można określić liczbę duplikatów jako wartość odcięcia.
źródło
Miałem podobny problem, ale musiałem zidentyfikować zduplikowane wiersze według wartości w określonych kolumnach. Wymyśliłem następujące rozwiązanie dplyr :
Kod grupuje wiersze według określonych kolumn. Jeśli długość grupy jest większa niż 1, kod oznacza wszystkie wiersze w grupie jako zduplikowane. Gdy to zrobisz, możesz użyć
Duplicated
kolumny do filtrowania itp.źródło