Ich möchte doppelte Zeilen anhand von 2 Spalten identifizieren und markieren. Ich möchte für jedes Duplikat eine eindeutige Kennung erstellen, damit ich nicht nur weiß, dass die Zeile ein Duplikat ist, sondern auch, mit welcher Zeile es sich um ein Duplikat handelt. Ich habe einen Datenrahmen, der wie folgt aussieht, mit einigen doppelten Elementpaaren (beim Anpassen und Sitzen) und anderen Paaren, die nicht dupliziert werden. Während die Elementpaare dupliziert werden, sind die darin enthaltenen Informationen eindeutig (z. B. hat eine Zeile einen Wert in Wert1 für 1 Zeile, nicht jedoch Wert2 und Wert 3, die zweite oder doppelte Zeile enthält nur Zahlen für Wert2 und Wert3 nicht Wert1)
aktueller Datenrahmen
value1 value2 value3 fit sit
[1,] "1" NA NA "it1" "it2"
[2,] NA "3" "2" "it2" "it1"
[3,] "2" "3" "4" "it3" "it4"
[4,] NA NA NA "it4" "it3"
[5,] "5" NA NA "it5" "it6"
[6,] NA NA "2" "it6" "it5"
[7,] NA "4" NA "it7" "it9"
Code zum Generieren eines Beispieldatenrahmens
value1<-c(1,NA,2,NA,5,NA,NA)
value2<-c(NA,3,3,NA,NA,NA, 4)
value3<-c(NA,2,4,NA,NA,2, NA)
fit<-c("it1","it2","it3","it4", "it5", "it6","it7")
sit<-c("it2","it1","it4","it3", "it6", "it5", "it9")
df.now<-cbind(value1,value2,value3, fit, sit)
Ich möchte es in einen Datenrahmen konvertieren, der so aussieht:
gewünschter Datenrahmen
val1 val2 val3 it1 it2
[1,] "1" "3" "2" "it1" "it2"
[2,] "2" "3" "4" "it3" "it4"
[3,] "5" NA "2" "it5" "it6"
[4,] NA "4" NA "it7" "it9"
Ich habe überlegt, die folgenden Schritte auszuführen: 1. Erstellen Sie neue Variablen mit fit und setzen Sie sich mit dem niedrigsten und dem höchsten Element zusammen, um doppelte Paare zu identifizieren. 2. Identifizieren Sie doppelte Elementpaare. 3. Verwenden Sie ifelse, um eindeutige Informationen auszuwählen und einzugeben.
Ich weiß, wie man die Schritte 1 und 3 ausführt, bin aber bei Schritt 2 festgefahren. Ich denke, ich muss nicht nur das TRUE / FALSE-Duplikat identifizieren, sondern möglicherweise eine Spalte mit einer eindeutigen Kennung für jedes Elementpaar wie dieses (dort) sind 2 zusätzliche Zeilen wegen meines Schrittes 1):
value1 value2 value3 fit sit lit hit dup
[1,] "1" NA NA "it1" "it2" "it1" "it2" 1
[2,] NA "3" "2" "it2" "it1" "it1" "it2" 1
[3,] "2" "3" "4" "it3" "it4" "it3" "it4" 2
[4,] NA NA NA "it4" "it3" "it3" "it4" 2
[5,] "5" NA NA "it5" "it6" "it5" "it6" 3
[6,] NA NA "2" "it6" "it5" "it5" "it6" 3
[7,] NA "4" NA "it7" "it9" "it7" "it9" NA
Ich bin mir nicht sicher, wie ich das machen soll.
Ich bitte um Hilfe bei Schritt 2 oder es gibt einen besseren Weg, dies zu lösen als die von mir beschriebenen Schritte.
Verwenden Sie
!duplicated()
nachsort
ing.quelle
Verwenden
melt/dcast
vondata.table
Daten
quelle
Eine weitere
data.table
Option:Ausgabe:
quelle
Hier ist mein Versuch, data.table zu verwenden. Ihre Daten werden aufgerufen
mydf
. Zuerst habe ich für jede Zeile sortiertfit
undsit
eine neue Variable erstelltgroup
. Dann habe ich für jede Gruppe Werte in den drei Wertespalten sortiert (dh Wert1, Wert2 und Wert3). Schließlich habe ich die erste Zeile für jede Gruppe extrahiert.DATEN
quelle
Dies kann auch mit getan werden
tidyr
‚spivot_longer
mitvalues_drop_na = TRUE
kombiniert mitpivot_wider
:Daten
quelle