2016-07-06 15 views
-2

Wie entferne ich doppelte Spalten mit data.table? (Wobei nur einer von ihnen)Wie doppelte Spalten (Inhalt) in data.table R entfernen?

Ich weiß, es gibt noch andere Fragen über doppelte Spalten, aber sie überprüfen nur für doppelte Spaltennamen nicht für den Inhalt,

Was ich will ist für Spalten mit unterschiedlichen Namen zu sehen, aber gleichen Inhalt.

Grüße

+0

zeigen Sie einige Beispiel – akrun

+2

Schauen Sie sich das zugehörige Antwort: http://stackoverflow.com/a/37564270 –

+0

Mögliche Duplikat [Lösche redundante Spalten in R] (http://stackoverflow.com/questions/37564066/delete-redundant-columns-in-r) – dww

Antwort

2

Dies ist eine gemeinsame Aufgabe in Feature-Engineering. Der folgende Code Chunk wurde nur für diesen Zweck von mir und der Gemeinde auf Kaggle entwickelt:

##### Removing identical features 
features_pair <- combn(names(train), 2, simplify = F) # list all column pairs 
toRemove <- c() # init a vector to store duplicates 
for(pair in features_pair) { # put the pairs for testing into temp objects 
    f1 <- pair[1] 
    f2 <- pair[2] 

    if (!(f1 %in% toRemove) & !(f2 %in% toRemove)) { 
    if (all(train[[f1]] == train[[f2]])) { # test for duplicates 
     cat(f1, "and", f2, "are equals.\n") 
     toRemove <- c(toRemove, f2) # build the list of duplicates 
    } 
    } 
} 

Dann können Sie einfach fallen je nachdem, welche Kopie der Duplikate Sie wollen. Standardmäßig verwenden ich die Version in dem temporären Objekt gespeichert f2 und entfernen Sie sie wie folgt aus:

train <- train[,!toRemove] 
+1

Ich würde sicherlich einen Kommentar zu dem Downvote zu schätzen wissen. Dies ist einer meiner nützlichsten und am häufigsten verwendeten Code-Chunks. –

+2

Ich habe Ihre Antwort auf das OP nicht abgelehnt, aber Ihr Code scheint ziemlich lang zu sein, wo Sie 'dat [! Duplicated (as.list (dat))]' für data.frame oder 'dat [,! Duplicated (as.list (dat)), mit = FALSE] 'for data.table –

+2

nur kurios, hast du die geschwindigkeit (mit' data.table' ...) mit der obigen verknüpften antwort verglichen (siehe @docendodismus's kommentar)? Ich würde die Vergleichsfunktion einkapseln und sie als 'FUN'-Argument zu' combn() 'verwenden, ansonsten aber nette Antwort. –