2017-06-05 2 views
0

Ich muss eine Datenüberprüfung durchführen, um festzustellen, ob in CodeA1, CodeA2 und Code A3 (Spalten) Duplikate vorhanden sind.Duplizierte Zeilen/Spalten validieren

CodeA1 CodeA2 CodeA3 
1 1  NA  5  
2 3  1  3  
3 8  3  3  
4 3  NA  NA  
5 4  1  2  
6 1  8  3  

Die Zeilen in allen Spalten (CodeA1, CodeA2, CodeA3) sollten eindeutig sein.

Kann jemand bitte in R helfen?

Ich mag würde die Duplikate über alle Zeilen und haben das Ergebnis, wie unten

CodeA1 CodeA2 CodeA3 Duplicate 
1 1  NA  5 No 
2 3  1  3  Yes 
3 8  3  3  Yes 
4 3  NA  NA  No 
5 4  1  2  No 
6 1  8  3  No 

Antwort

5

A possibile Lösung zu identifizieren ist:

dtset$Duplicate <- apply(dtset,1,function(x) any(table(x)>1)) 

dtset 

######## 
    CodeA1 CodeA2 CodeA3 Duplicate 
1  1  NA  5  FALSE 
2  3  1  3  TRUE 
3  8  3  3  TRUE 
4  3  NA  NA  FALSE 
5  4  1  2  FALSE 
6  1  8  3  FALSE 
+0

Danke Marco. Ich erkläre die apply() -Funktion. Wenn ich die von Ihnen gepostete Lösung verwende, kann ich die Duplikate mit Ausnahme von [2,] nicht identifizieren (ich habe "FALSE". Gibt es dafür bestimmte Gründe? – CHONG

+0

Zweite Zeile -> 2 3 1 3 FALSE – CHONG

+2

Der Code funktioniert bei mir. Sind Ihre Daten im 'dat.frame' Format? – AK88

1

Eine andere mögliche Lösung apply und unique verwenden. Dies identifiziert auch eine doppelte NA als dupliziert, obwohl Sie sie ändern könnten.

mydf <- 
    data.frame(
     CodeA1 = c(1, 3, 8, 3, 4, 1), 
     CodeA2 = c(NA, 1, 3, NA, 1, 9), 
     CodeA3 = c(5, 3, 3, NA, 2, 3) 
    ) 
mydf$duplicated <- 
    apply(mydf[, 1:3], 1, function(x) { 
     ifelse(length(unique(x, is.na = T)) < length(x), TRUE, FALSE) 
    }) 
mydf 

    CodeA1 CodeA2 CodeA3 duplicated 
1  1  NA  5  FALSE 
2  3  1  3  TRUE 
3  8  3  3  TRUE 
4  3  NA  NA  TRUE 
5  4  1  2  FALSE 
6  1  9  3  FALSE 
Verwandte Themen