Объединение листов Excel в книгу для создания таблицы панельных данных с указанием времени и фирм в качестве индексов

Я хочу создать таблицу панельных данных для регрессии панельных данных в R. У меня есть рабочая книга с каждым листом, содержащим переменные для одной фирмы (всего 5 листов, то есть 5 фирм). Переменные одинаковы для каждой фирмы. Периодичность - ежедневно. Мне нужна таблица данных с одной панелью с фирмами и временем в качестве индексов, чтобы я мог брать среднегодовые значения переменных для каждой фирмы и выполнять регрессию панельных данных. Я запустил следующий код:

sheets<- c("BOB", "RIL",  "GAIL", "ITC", "MM")for (x in 1:5)  {df <- bind_rows(df, read.xlsx(path, sheet=sheets[x] ), .id= "Firm")}

но приведенный выше код берет только первый лист, создает столбец Firms со значениями всегда 1 и столбец даты как неизвестные числа. Я также пробовал следующий код:

df <- bind_rows(read.xlsx(path, sheets[x]), .id= "Firm")

Но возвращает тот же результат. Кажется, что код может получить доступ только к первому листу в книге. Пожалуйста, предложите способ решить эту проблему. Ниже приводится ссылка на книгу: workbook


person Polar Bear    schedule 03.03.2016    source источник
comment
Рассмотрите возможность импорта всех листов в R и преобразования данных там. Многие операции изменения формы, изменения и транспонирования доступны в R. Пожалуйста, разместите образцы данных для воспроизводимого примера.   -  person Parfait    schedule 03.03.2016
comment
@Parfait Я загрузил необходимые данные. Спасибо   -  person Polar Bear    schedule 03.03.2016


Ответы (1)


Здесь используется пакет readxl. Пакету xlsx что-то не понравилось в вашем файле, и возникла ошибка.

library("readxl")
sheets<- c("BOB", "RIL",  "GAIL", "ITC", "MM")
df <- NULL
for (sheet in sheets){
  tmp <- read_excel(path, sheet=paste0(sheet, " IS Equity"))
  tmp$firm <- rep(sheet, nrow(tmp))
  df <- rbind(df, tmp)
}
person cory    schedule 03.03.2016
comment
Я подозреваю, что ваши листы не одинакового формата. Имена столбцов и типы данных должны совпадать. Я отредактирую свой код, чтобы добавить столбец идентификатора. - person cory; 03.03.2016
comment
Я больше не могу помочь без файла для тестирования. - person cory; 03.03.2016
comment
Я отредактировал свой ответ. xlsx пакету не понравился ваш файл. пакет readxl работал нормально. - person cory; 03.03.2016
comment
Спасибо, @cory. Такие люди, как вы, делают этот сайт прекрасным местом. - person Polar Bear; 03.03.2016
comment
аргумент sheet может принимать индекс или имя листа. Итак, вы можете сказать for(sheet in 1:500){ ... и read_excel(path, sheet=sheet) - person cory; 03.03.2016
comment
Основываясь на ваших предложениях, у меня есть этот код: df ‹- NULL for (sheet in excel_sheets (path)) {tmp‹ - read_excel (path, sheet = sheet) tmp $ id ‹- rep (sheet, nrow (tmp)) df ‹- rbind (df, tmp)} df‹ - df [, c (ncol (df), 1: (ncol (df) -1))]. пожалуйста, обновите, чтобы другие могли использовать его напрямую как функцию для создания таблицы данных панели из книги, содержащей листы mant. - person Polar Bear; 04.03.2016