2013-09-20 4 views
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) 

с каждым номером во втором столбце есть соответствующий файл в другой папке data. У меня есть тысячи файлов в этой папке, так называемой "data".

список файлов:

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

файлы именуются как (например) data_num_gp2103333.csv

число в названии после gp соответствует второй колонке в текстовом файле.

Я хочу переместить (или скопировать) только файлы с цифрами существуют во втором столбце в текстовом файле из папки 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 ... 

ответ

2

Вы можете попробовать пример ниже. Сначала мы перебираем каждое значение Index в вашем table (боковое примечание - есть функция, называемая table(), поэтому я бы не позвонил при вызове переменной). Мы перечисляем файлы, которые содержат это значение индекса. Я предполагаю, что каждое значение индекса относится к одному файлу. В этом случае мы возвращаем вектор символа имен файлов.

Далее мы перебираем имена файлов, копируя каждый файл в папку "D:/NewData" (которая уже должна быть на вашем диске). файл будет иметь исходное имя файла, только в новой папке. Я использую для этого цикл for, потому что а) время выполнения цикла пренебрежимо мало по сравнению с временем, которое требуется для выполнения file.copy и b), потому что мы вызываем file.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))) 
} 
+0

@sacvf это ваша проблема. Пожалуйста, опишите свои данные правильно. –

+0

Если это так, 'table [, 2]' должно относиться ко второму столбцу. –

+0

@sacvf, поэтому seperator в вашем файле 'data' не' ',' ', это возможно' '' ', т. Е. Whitespace. –

Смежные вопросы