2017-02-10 11 views
0

それぞれ100個以上のデータフレーム(df1, df2, df3, ....)に同じ変数が含まれています。私はそれらのすべてをループし、複製をidで削除したいと思います。 df1については、次のようにしてください。複数のデータフレームの重複行を削除します

df1 <- df1[!duplicated(df1$id), ] 

これを効率的に行うにはどうすればよいですか?

+0

リストに入れて、 'lapply'を使います。 [この投稿](http://stackoverflow.com/questions/17499013/how-do-i-make-a-list-of-data-frames)が役立ちます。そこに私の答えは、名前付きリストを取得する簡単な方法を提供し、gregorの優れた答えはdata.framesのリストを操作する方法を示しています。 – lmo

+0

オブジェクト名が "df"で始まるすべてのデータフレームであれば、 'ls(pattern =" df [0-9] ")'を使用してリストを作成し、それらを繰り返したいと思うかもしれません。 –

答えて

2

同様に構造化された100個のdata.framesを扱っているなら、それらを一意に命名する代わりに、それらをリストに入れることをお勧めします。 @MatteoCastagnaコメントで示唆されているように、

df_varnames <- ls()[ grep("^df[0-9]+$", ls()) ] 

か::

df_varnames <- ls(pattern = "^df[0-9]+$") 
、あなたは簡単のようなもので、リストに割り当てることができ、それらは全て dfと数命名されていると仮定すると、

(これはより速く、よりクリーンです)。その後:

dflist <- sapply(df_varnames, get, simplify = FALSE) 

そして、ここから、あなたの質問は単純です:

dflist2 <- lapply(dflist, function(z) z[!duplicated(z$id),]) 

いずれかを追加していないながら、個々のdata.frames(再び、落胆は、ほとんど常に処理が遅くなりますと、あなたはそれらに対処しなければならない場合機能)、あなたは)上からdf_varnamesを使用して(このようなハックを試すことができます。

for (dfname in df_varnames) { 
    df <- get(dfname) 
    assign(dfname, df[! duplicated(df$id), ]) 
} 

私はこれを使用することを検討したとき、私はうんざり、私は、私はあなたのworkfを理解していない可能性を認めます低い。