2016-11-11 3 views
-1

Предположим, у меня есть файл excel, называемый report.xlsx. Этот файл имеет 10 листов, удобно именуемых Sheet1 through Sheet10. На каждом листе в строке 14 есть заголовки столбцов: S/N, RegistryNr, Surname, FirstName, (пусто), имя отца, имя MotherName, пол, (пустой), DOB. Как я могу объединить каждый лист в один набор данных?Как слить несколько листов книги Excel в r?

Я знаю, что с excel_sheets("report.xlsx") Я могу получить все имена листов в вектор.

Я знаю, что с df <- read_excel("report.xlsx", 1, skip = 14) Я могу получить все данные одного листа в фрейме данных df.

Вот насколько мне известно, в R:/

Как объединить эти команды, чтобы импортировать каждый лист в тот же кадр данных?

+2

Просто написать цикл, который перебирает листы, что-то вроде '(для я в 1:14) {DF <- rbind (ДФ, read_excel («report.xlsx», i, skip = 14))} ' – ytk

+0

@ytk Спасибо! Это то, что я искал! –

ответ

-1
library(data.table) 
library(foreach) 

xls.files = dir(pattern = "xls") 

l = foreach(i = 1:length(xls.files)) %do% { 

    f = read_excel(xls.files[i]) 
    setDT(f) 

    f[, label := xls.files[i]] 

} 

rbindlist(l) 

(преимущество foreach в том, что вы можете настроить параллельный бэкэнд).

2

я обычно это сделать с помощью purrr и readxl:

library(purrr) 
library(readxl) 

file <- 'path to report.xlsx' 

sheets <- excel_sheets(file) 

df <- map_df(sheets, ~ read_excel(file, sheet = .x, skip = 14)) 
+0

Я получаю ошибку 'Ошибка в eval (substitute (expr), envir, enc): поврежденный фрейм данных –

+0

Наличие NA в ваших заголовках может вызвать проблему. –

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