2015-12-04 2 views
2

Я работаю над проектом, в котором первый шаг включает объединение большого количества данных.Группировка кадров данных в R

Что я до сих пор импортирует все CSV-файлы в каталог, содержащий выходные данные из базы данных доступа. Это данные, собранные с использованием разных методов и разделяемые к году сбора данных. Все эти метаданные включены в имя файла: Gap.2013.csv - это csv, содержащий все данные Gap-Intercept с 2013 года, SR.2014.csv содержит данные о богатстве видов с 2014 года.

Далее блок повторяющегося кода создает столбец, обозначающий переменную 'year', и объединяет как типы данных.

Пример кода следующим образом

setwd("AIMRD Exports/CSV") 
list.filenames <- list.files(pattern="*.csv") 
for (i in 1:length(list.filenames)) { 
    assign(list.filenames[i],    
    read.csv(paste(list.filenames[i], sep='')))} 

Gap.2013.csv$Year <- 2013  
SR.2013.csv$Year <- 2013 
Gap.2014.csv$Year <- 2014  
SR.2014.csv$Year <- 2014 
Gap.2015.csv$Year <- 2015  
SR.2015.csv$Year <- 2015 
Gap <- rbind (Gap.2013.csv, Gap.2014.csv, Gap.2015.csv) 
SR <- rbind (SR.2013.csv, SR.2014.csv, SR.2015.csv) 

Кто-нибудь есть какие-либо предложения о том, как сократить повторение? Мой первый, хотя и должен был каким-то образом изменить цикл вверху и использовать list.files (pattern = x), но пока не повезло.

+1

Shameless вилка: http://stackoverflow.com/questions/33851162/to-stack-up-results-in-one-masterfile-in-r/33881653#33881653 Я думаю, что это может решить ваши проблемы. – Shape

ответ

1

Я предлагаю сохранить ваши первые две строки, где вы получите список файлов. Затем вы можете написать функцию, которая нарушает их.

library(plyr) 
library(stringr) 

myFun <- function(files, method) { 
    files <- files[grep(method, files)] #Get a list of files for one type of method. 
    dat <- mdply(files, 
       function(file) { 
        year <- str_extract(file, "\\d{4}") 
        iDat <- read.csv(file, stringsAsFactors=FALSE) 
        iDat$Year <- year 
        return(iDat) 
       }) 
    return(dat) 
} 

Gap <- myFun(list.files, 'Gap') #method argument is case-sensitive 
SR <- myFun(list.files, 'SR') 
Смежные вопросы