Объединение CSV из папки в один CSV в R

Я пытаюсь написать код, который будет брать файлы из «Inputs_Path» (в настоящее время там 6 .csv), объединять их и выводить в «Outputs_Path».

На данный момент мой код будет нормально читать файлы в папке, но он ломается, когда попадает в «еще» часть моего цикла.

Когда я вывожу файл, он, очевидно, выводит только первый входной файл. Но я знаю, что выход работает.

Ошибка, которую я получаю, связана с самими файлами... как будто я указываю не на то место. Вот сообщение об ошибке;

Error in file(file, "rt") : cannot open the connection
In addition: Warning message:
In file(file, "rt") : cannot open file 'NA': No such file or directory

А вот Кодекс;

Inputs_Path <- "C:/MortgageSafe/Cirt2014-1/Sample"
Output_Path <- "C:/MortgageSafe/Cirt2014-1/BatchOutput"

setwd(Inputs_Path)

file_list<-list.files()
length_file_list<-length(file_list)

for(i in 1:length_file_list){

file_list<- as.character(file_list[i])
#do.call(rbind,lapply(file_list, read.csv, FALSE))
Mortgage_Sims<- read.table(file_list, header=TRUE, sep=",")

if(i == 1){
  Collated_Sims <- Mortgage_Sims
 }

else{
  Collated_Sims <- rbind(Collated_Sims, Mortgage_Sims)
  } 
}
Collated_Sims[, 1]<- noquote(Collated_Sims[, 1])

setwd(Output_Path)
write.table(Collated_Sims, "Collated Sims.csv", sep=",", row.names=FALSE, 
quote=FALSE)

У кого-нибудь есть какие-либо предложения по части else? заранее спасибо


person matrixfox    schedule 17.05.2018    source источник


Ответы (3)


file_list<- as.character(file_list[i])

Здесь вы определяете список файлов как строку, в следующем раунде цикла вы пытаетесь прочитать вторую запись «списка», которая теперь является строкой, и в результате получаете NA,

Переименуйте file_list в цикле, например, в file_name, и он должен работать

file_name<- as.character(file_list[i]) 
Mortgage_Sims<-read.table(file_name,header=TRUE, sep=",") 
person Malte    schedule 17.05.2018

Вот код для загрузки данных, если ваши файлы csv имеют одинаковую структуру

# 1. Set path to the directory with data files
dir_data <- "..."

# 2. Set counter of loaded csv files
file_index <- 0

# 3. Read all csv files into one data set
for(file_name in list.files(dir_data)){

  # 3.1. Define path to csv file
  file_path <- paste0(dir_data, file_name)

  # 3.2. Load csv file
  df_file <- read.csv(file_path)

  # 3.3. Increment counter of loaded files
  file_index <- file_index + 1

  # 3.4. Merge data file with result data set 'df_result'
  if(file_index == 1){
    df_result <- df_file
  } else {
    df_result <- rbind(df_result, df_file)
 }

}
person Andrii    schedule 17.05.2018
comment
действительно, все они имеют одинаковую структуру. в основном это симуляции, которые я хочу объединить в один лист Excel. - person matrixfox; 17.05.2018
comment
так что - давайте попробуем мой фрагмент - и оценим его - person Andrii; 17.05.2018

Существует так много способов объединить все файлы CSV в один DF.

setwd("C:/your_path_here")
fnames <- list.files()
csv <- lapply(fnames, read.csv)
result <- do.call(rbind, csv)

filedir <- setwd("C:/your_path_here")
file_names <- dir(filedir)
your_data_frame <- do.call(rbind,lapply(file_names,read.csv))

filedir <- setwd("C:/your_path_here")
file_names <- dir(filedir)
your_data_frame <- do.call(rbind, lapply(file_names, read.csv, skip = 1, header = FALSE))

filedir <- setwd("C:/your_path_here")
file_names <- dir(filedir)
your_data_frame <- do.call(rbind, lapply(file_names, read.csv, header = FALSE))

# 
temp <- setwd("C:/your_path_here")
temp = list.files(pattern="*.csv")
myfiles = lapply(temp, read.delim)
person ASH    schedule 19.05.2018