2015-03-10 2 views
0

У меня есть много файлов csv с данными. Я хочу выполнить одно и то же действие для всех моих файлов, но я не знаю, как это сделать, не делая этого индивидуально для всех файлов.Выполнить действие по всем данным

Я прочитал во всех CSV-файлов и сохранения данных в моей среде с помощью команды:

files <- list.files(path=path, pattern="*.csv") 
for(file in files) { 
    perpos <- which(strsplit(file, "")[[1]]==".") 
    assign(gsub(" ","",substr(file, 1, perpos-1)), 
      read.csv(paste(path,file,sep=""))) 
} 

Действие Я пытаюсь выполнить это FFT (х) (быстрое преобразование Фурье) на векторе. Например, если имя файла - data1, я хотел бы сделать fft (data1 $ vector). Я хотел бы сделать это для всех данных.

ответ

1

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

Что-то вдоль этих линий должны делать то, что вы хотите:

files <- list.files(path = path, pattern = "*.csv") 

# Read your files into a list of data tables 
# (if you want data frames, set data.table = FALSE) 
data <- lapply(files, fread) 

data <- rbindlist(data, use.names = TRUE, fill = TRUE) 

Вам может понадобиться дополнительные аргументы fread в зависимости от специфики ваших файлов. И вам может не потребоваться указать use.names или fill.

+1

'rbindlist()' также имеет аргумент 'idcol' из 1.9.5, который автоматически генерирует идентификатор для записей, считанных из каждого файла. – Arun

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