2016-08-31 12 views
0

Я читаю некоторые файлы csv для создания фрейма данных и добавляю к нему дополнительный столбец с именем файла, используя следующий код:«rbind» и «lapply» работают очень хорошо, если мне не нужно добавить имя файла

wd <- "Working directory" 
file_list <- list.files(wd) 

### Function: read data ### 
read_data <- function(file){ 
    d <- read.csv(paste(wd,file,sep=""), stringsAsFactors = FALSE, strip.white = TRUE, na.strings = c("NA","")); # read in every file in the working directory 
    d$FileName <- substr(file,20,29); # append part of file name 
    d # return the dataframe 
} 

### Call rbind: merge data ### 
df <- do.call(rbind, lapply(file_list,read_data)) 

Но эта ошибка возникает:

Error in `$<-.data.frame`(`*tmp*`, "FileName", value = "2016010209") : 
    replacement has 1 row, data has 0 

Что я делаю неправильно?

Cheers

+3

Возможно, файл, соответствующий «2016010209», может содержать только заголовок и данные? – Roland

+2

Попробуйте добавить инструкцию 'print' или' message' в функцию 'read_data', чтобы сначала определить, какой файл вызывает проблемы. Осмотрите файл, который действительно находится в том виде, который вы ожидаете. –

+0

IMHO лучше установить рабочий каталог 'setwd (wd)'. В этом случае вам придется изменить скрипт в некоторых частях. – jogo

ответ

0

Всегда проверяйте данные! Файл был поврежден, поэтому пуст! Спасибо за помощь!