Автоматизация задач для нескольких файлов с использованием R для перестановки файлов исходных данных в рабочем каталоге R - PullRequest
4 голосов
/ 27 марта 2012

Я новичок в R и в настоящее время изучаю, как автоматизировать работу с файлами в каталоге, в настоящее время я пытаюсь использовать 5 образцов CSV-файлов с почасовыми образцами данных в каждом столбце в течение 24 часов в каталоге.Я пытаюсь установить некоторые коды для организации файлов в подходящем формате для будущего, чтобы я мог легко читать в R позже.Мои файлы в странном формате с 6 верхними строками с ненужными данными.Я пытаюсь выполнить несколько задач следующим образом:

Пример файла данных:

"w", "Fri 1 Jan", "123", "42", "12", "21"  
"w", "Sat 2 Jan", "23", "54", "62", "31"    
"w", "Sun 3 Jan", "13", "32", "22", "32"    
"w", "Mon 4 Jan", "153", "42", "52", "31"    
"w", "Tue 5 Jan", "13", "14", "67", "35"  
  • Задача 1: игнорировать первые 6 строк и начать чтение с 7-й строки

  • Задача 2: установить заголовки столбцов: «тип», «дата», «1», «2», «3», «образец»

  • Задача 3: Каждый из моих файлов имеет имя файла, похожее на это: «605_E875071_N713451.csv» - я пытаюсь создать 3 новых отдельных столбца с именами: ID = ”605”, Easting = ”875071”и Northing = «713451»

  • Задача 4: создать какой-то цикл для выполнения всех этих шагов и сохранить его непосредственно в исходном файле

Я пытался отработать каждый шаг по отдельности, и до сих пор мне удалось найти коды на веб-сайте для выполнения следующих задач:

Задание 1:

data = read.csv(file.choose (),  skip = 6 )`    

Задание 2:

colnames(data) = c(“type”, “date”, “1”, “2”, “3”, “Total”)

Задание 3:

Я не уверен, как разделить на 3 разных столбца;пока что у меня есть возможность создать дополнительный столбец и ввести полное имя «605_E875071_N713451»:

read_csv_filename <- function(filename){ 
        ret <- read.csv(filename)    
        ret$Source <- filename     
        ret }  
     import.list <- ldply(filenames, read_csv_filename) 
             ldply(filenames, read_csv_filename)

В конечном итоге я пытаюсь достичь следующего:

“type”, “date”,  "ID", "Easting", "Northing", “1”, “2”, “3”, “Total”  
"w", "Fri 1 Jan",”605” ,”875071”,  “713451”,"123", "42", "12", "21"  
"w", "Sat 2 Jan",”605” ,”875071”,  “713451”,"23", "54", "62", "31"    
"w", "Sun 3 Jan",”605” ,”875071”,  “713451”,"13", "32", "22", "32"    
"w", "Mon 4 Jan",”605” ,”875071”,  “713451”,"153", "42", "52", "31"    
"w", "Tue 5 Jan", ”605” ,”875071”, “713451”,"13", "14", "67", "35"  

инаконец, мне интересно, есть ли способ автоматизировать эти шаги для автоматического выполнения задач и выполнения шагов для всех 5 файлов в каталоге и сохранения обратно в исходные файлы?

Буду очень признателен за любые ваши советы и рекомендации, спасибо

1 Ответ

3 голосов
/ 27 марта 2012

Я бы сказал, что вы на правильном пути для шагов 1 и 2. Однако для автоматизации процесса вам нужно будет использовать list.files() вместо file.choose().

Кроме того, я бы предложил избегать имен столбцов, которые начинаются с или являются только числом. вместо этого назовите их «один», «два», «три» или «V1» и т. д., чтобы вы могли использовать $ для их дальнейшего изучения.

Для задания 3 посмотрите на strsplit:

out <- strsplit(filename,'_')

тогда вы можете взять кусочки и делать с ними что хотите:

gsub('N', '', lapply(out, '[', 2)) # should get your Easting column

Что касается вашего последнего вопроса, простой ответ - нет. более сложный ответ заключается в том, что это сложно! Если файлы не достаточно большие (1–7 строк или более) или если на вашей машине очень мало оперативной памяти, вы должны нормально читать каждый файл в R (и, следовательно, в память) и записывать их обратно.

Отчасти к сведению: работая над этим, не стесняйтесь задавать отдельные вопросы (в идеале, с некоторыми образцами ваших данных, чтобы мы могли воспроизвести то, над чем вы работаете), и вы станете лучше и больше точные ответы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...