2017-05-06 32 views
0

私は2つのフォルダAとBにそれぞれ5000と6000のファイルを持っています。フォルダBはフォルダAのサブセットです。これらの2つのフォルダを比較し、不一致のファイルを別々のフォルダに移動する必要があります。ファイル名を比較して移動すると、どのようにRで実行できますかは2つのフォルダのファイル名を比較し、一致しないファイルを別のフォルダに移動します

+0

方法について'list.files()'を調べて名前を取得し、 '%in%'を使ってファイルが存在するかどうかを調べ、 'file.rename'や' file.copy() 'を探します。フォルダAとBの%の – din

+0

%は私にすべて偽を与えます。これは何を意味するのでしょうか?フォルダAには追加のファイルがありますが、どのように見つけることができますか? – DaphFab

答えて

0

まず、例としてAのためのディレクトリとここに(それぞれのディレクトリ内のファイルを一覧表示する必要があるでしょう:

flsA <- list.files(dirA,patt,full.names=TRUE, recursive=FALSE) 

pattを使用すると、(例えば".txt$"、ファイル拡張子のように、パターン文字列を指定することができます最後に$の点に注意してください。 Rにファイル名の最後を伝える)

あなたが含めるサブディレクトリは、recursiveTRUEに設定することができます。

full.namesオプションは完全なパスを指定し、後でファイルを移動するために必要です。あなたは両方のディレクトリがリストされていた場合

、あなたは機能basename%in%に含まれるファイルを比較することができます

ix <- basename(flsA) %in% basename(flsB) 

これはあなたに(両方AB内のファイルのTRUE)論理ベクトルを与えるであろうあなたをそして、あなたがしたいファイルのインデックスを作成するために使用することができます。

to_move <- flsA[!ix] 

私が目にしたいと論理ベクトルを逆にする!演算子を使用しています2つのディレクトリにないファイル。

最後に、あなたのファイル、例えばにしたい機能をlapplyことができます。

lapply(to_move, function(x) file.copy(x,new.dir_C) 

それらが正しくコピーされたら、あなたは原本を取り除くためにfile.removeを使用することができます。

lapply (to_move,file.remove) 
+0

コードは素晴らしいです。しかし、問題はファイル名にあります。 ECGV0007_wholecaseRRiQTi、ECGV0009_wholecaseRRiQTi .......... ECGV103113_wholecaseRRiQTi、ECGVS1-7662_wholecaseRRiQTi ....となど、フォルダBのファイル名:次のように私は、フォルダAのファイル名を持っているなどECGV103106_After_1stSleepOnset_RRiQTi ECGV0007_After_1stSleepOnset_RRiQTiを意味するものの数字だけでは一致/ unmatch。これらのファイルを比較するにはどうすればいいですか – DaphFab

+0

これは、別の質問、または元の質問の少なくとも変更を構成します。ファイル名が一致する場合は、正規表現を使用します。あなたの質問を更新する場合は、ファイル名の例文を追加して、私は私の答えを更新することができます私は表示されます – Val

関連する問題