2016-07-06 18 views
-2

data.tableで重複する列を削除するにはどうすればよいですか? (一つだけそれらのを維持する)data.table Rの重複する列(コンテンツ)を削除するには?

私が欲しいもの

は異なる名前を持つ列を探すことですが、同じ、私は重複したカラムに関するその他のご質問がある知っているが、彼らは単にコンテンツの重複する列名ではないかどうかを確認コンテンツ。

よろしく

+0

いくつかの例を示してください、この関連の答えで – akrun

+2

ルック:http://stackoverflow.com/a/37564270の –

+0

可能な複製を[Rの冗長列を削除](http://stackoverflow.com/questions/37564066/delete-redundant-columns-in-r) – dww

答えて

2

これは機能工学の一般的なタスクです。次のコードチャンクは、まさにこの目的のために自分自身とKaggle上のコミュニティによって開発されました:

##### 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 
    } 
    } 
} 

次に、あなたはちょうどあなたがしたい重複のいずれかのコピーをドロップすることができます。デフォルトでは、私は一時オブジェクトf2に保存されているバージョンを使用して、このようにそれらを削除します。

train <- train[,!toRemove] 
+1

私はdownvoteを説明するコメントを感謝します。これは私の最も有用で頻繁に使用されるコードチャンクの1つです。 –

+2

私はOPの解答をあきらめていませんでしたが、あなたのコードはdata.frameや 'dat [、!duplicated( ')のために' dat [!duplicated(as.list(dat) data.table –

+2

の場合、上記のリンクされた答え(cf. @ docendodismusのコメント)とスピード( 'data.table' ...を使用)を比較しましたか?私は比較関数をカプセル化し、 'combn()'の 'FUN'引数として使用しますが、そうでなければ良い答えです。 –

関連する問題