2012-09-10 2 views
1

У меня есть несколько файлов в одной папке, и я хочу их переименовать, я заметил, что R читает в алфавитном порядке, поэтому я использовал команду mixedsort, и это сработало, но когда я проверил результаты, я обнаружил, что файлы были прочитаны в другом порядок не численно. Имя первого файла Daily_NPP1.bin до Daily_NPP365.binКак заставить R читать в цифровом порядке?

  a<- list.files("C:\\New folder (6)", "*.bin", full.names = TRUE) 
     k<- mixedsort(a)#### load package feild 
      b <- sprintf("C:carbonflux\\Daily_Rh%d.bin", seq(k)) 
      file.rename(a, b) 

Как заставить R читать в порядке?

+0

При ближайшем рассмотрении, весь пример прекрасно работает на моем компьютере. В чем именно вопрос? – Backlin

ответ

0

Если переименование - это все, что вы хотите сделать, вы можете просто сделать следующее, независимо от сортировки.

b <- sub("^.*?([0-9]+)\\.bin$", "C:\\\\carbonflux\\\\Daily_Rh\\1.bin", a) 
file.rename(a, b) 

Первый аргумент sub извлекает номера в конце имен файлов, а второй вставляет его в новый шаблон имени файла (в положении \\1). Все \\\\ необходимы, чтобы избежать обратных косых черт правильно.

+0

Фактически я хочу переименовать в отношении сортировки (что очень важно). Ваш код по-прежнему применим? –

+1

Я не уверен, что следую. То, что мой код делает, хотя и переименовывает все файлы с именем 'C: \ New folder (6) \ Daily_NPP # .bin' в' C: \ carbonflux \ Daily_Rh # .bin', где '#' - это тот же номер как до, переименовать, например 'Daily_NPP123.bin' становится' Daily_Rh123.bin'. – Backlin

0

Вот способ заказать вектор без переименования файлов:

# Replication of data: 
a <- sort(paste0("Daily_NPP",1:365,".bin")) 

# Extract numbers and order: 
a <- a[order(as.numeric(gsub("[^0-9]","",a)))] 
+0

Это был мой первоначальный ответ, прежде чем понять, что 'mixedsort' уже позаботится об этом. – Backlin

+0

Большое спасибо. на самом деле я действительно хочу переименовать их в соответствии с порядком. –

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