Есть ли функция R для извлечения данных (на самом деле это не база данных, данные неструктурированные с предложениями) из 2 файлов Excel - PullRequest
0 голосов
/ 28 апреля 2019

Есть 2 файла Excel.Каждый файл Excel имеет разные листы.Допустим, в моем рабочем каталоге есть 2 файла Excel.Файл1 и Файл2.Файл1 имеет 4 листа, а Файл2 - 5 листов.Все имена листов имеют разные имена.

Пример: Файл1 (цена, планирование, контракт, доставка) Файл2 (CND, скидка, установка, цена, аффидевит)

Теперь мне нужно извлечь вышеуказанные данные в R. Мне нужнонаконец, есть 2 файла в R с именем объекта, которое будет отображаться как Имя файла, а также имя листа, которое отражается в данных.

Так, например.Мои окончательные R-файлы должны быть похожи на

1) «Файл1», который содержит все данные (со всех 5 листов) из Excel Файл1 2) «Файл2», который содержит все данные (со всех 4 листов)из Excel File2

Можем ли мы что-нибудь подобное?

1 Ответ

1 голос
/ 28 апреля 2019

Вы можете использовать пакет openxlsx, чтобы открыть файлы Excel. Чтобы загрузить все листы в структуру, вы можете сделать:

library(openxlsx)

sheetNames = names(loadWorkbook("Book1.xlsx"))
File_1 = lapply(sheetNames, function(x){read.xlsx("Book1.xlsx",sheet = x)})
names(File_1) = sheetNames

При этом будут прочитаны имена листов из файла 'Book1.xlsx', а затем продолжено чтение всех данных в File_1. Последняя строка добавит имя листов к каждому элементу в списке.

Структура, которую вы получаете, является списком. Например:

> File_1
$Sheet1
  1 2
1 3 4

$Sheet2
  1 2
1 1 2
2 1 2

Edit:

Если вы хотите прочитать все файлы Excel и сохранить их в одной структуре, выполните:

library(openxlsx)
filenames = list.files(pattern = "\\.xlsx$")

fullData = lapply(filenames, function(fil){
  sheetNames = names(loadWorkbook(fil))
  File_data = lapply(sheetNames, function(x){read.xlsx(fil,sheet = x)})
  names(File_data) = sheetNames
  File_data
})

names(fullData) = filenames

Объяснение:

lapply будет перебирать все имена файлов, оканчивающиеся на .xlsx, и для каждого из них:

  • читать имена листов каждой книги
  • загрузить данные листа
  • добавить название листа

И после прочтения всех файлов имя каждого файла добавляется к результату.

Результат (для двух файлов, созданных для этого):

> fullData
$Book1.xlsx
$Book1.xlsx$Sheet1
  1 2
1 3 4

$Book1.xlsx$Sheet2
  1 2
1 1 2
2 1 2


$Book2.xlsx
$Book2.xlsx$Income
  11 22 55 77
1 33 44 66 88

$Book2.xlsx$Expenses
  3 55
1 3 55
2 3 55
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...