2

私は(頭)を含むテキストファイルを持っています:

"Grid.Point.Index" "Latitude" "Longitude" "Cell"
"544361" 2093507 40.071983 0 1322
"545570" 2098421 40.184559 0 1322
"545571" 2098423 40.184559 0.146776 1322
"546781" 2103327 40.297134 0 1322
"546782" 2103329 40.297134 0.14702 1322
"546784" 2103333 40.297134 0.294039 1322

ファイルを読むには:

table= read.table("C:\\Users\\lonlatnter.txt", sep=",",header=TRUE)

2 番目の列の各番号には、関連するファイルが別のフォルダにありますdata。このフォルダーには、何千ものファイルがあり、"data".

ファイルを一覧表示するには:

data<- list.files("D:\\data", "*.csv", full.names = TRUE)

ファイルの名前は(例)data_num_gp2103333.csv

名前の後の数字はgp、テキスト ファイルの 2 列目に対応します。

テキストファイルの2列目に番号が存在するファイルのみをフォルダdataから新しいフォルダに移動(またはコピー)したいmydata。助けてください。

str( table )

'data.frame':   374 obs. of  4 variables:
$ Grid.Point.Index: int  2093507 2098421 2098423 2103327 2103329 2103333 2108225 2108227 
                         2108231 2113115 ...
$ Latitude        : num  40.1 40.2 40.2 40.3 40.3 ...
$ Longitude       : num  0 0 0.147 0 0.147 ...
$ Cell            : int  1322 1322 1322 1322 1322 1322 1322 1322 1322 1322 ...
4

1 に答える 1

2

以下の例を試すことができます。最初に、あなたの各Index値をループしますtable(補足-呼び出される関数があるtable()ため、変数を呼び出すことは避けます)。このインデックス値を含むファイルを一覧表示します。各インデックス値は単一のファイルに関連していると想定しています。その場合、ファイル名の文字ベクトルを返します。

次に、ファイル名をループして、各ファイルをフォルダー"D:/NewData"(ドライブに既に存在している必要があります) にコピーします。ファイルには元のファイル名が付けられ、新しいフォルダーに保存されます。これにはループを使用します。なぜなら、 a for) ループの実行時間は実行にかかる時間と比較して無視できるからです。それは戻り値です (コピーが成功したかどうかを示す論理値)。file.copyfile.copy

fls <- sapply( table[,2] , function(x) list.files( path = "D:\\data"  , pattern = as.character( x ) , full.names = TRUE ) )

#  Use a 'for' loop here because we are calling the
#  file.copy function for it's side effect rather
#  than return value (i.e. to copy a file)
for( i in fls ){
    file.copy( from = i , to = paste0( "D:/NewData/" , basename( i ) ) )
}
于 2013-09-20T16:06:38.117 に答える