Импорт Excel-таблиц в R

Есть ли способ импортировать именованную таблицу Excel в R как data.frame?

Обычно у меня есть несколько именованных таблиц Excel на одном листе, которые я хочу импортировать как data.frames, не полагаясь на статические ссылки на строки и столбцы для расположения таблиц Excel.

Я попытался установить namedRegion, который является доступным аргументом для нескольких функций импорта Excel, но, похоже, это не работает для именованных таблиц Excel. В настоящее время я использую пакет openxlxs, в котором есть функция getTables(), которая создает переменную с именами таблиц Excel из одного рабочего листа, но не данных в таблицах.


person MelkorNO    schedule 08.07.2020    source источник


Ответы (4)


Чтобы получить вашу именованную таблицу, нужно немного потрудиться.

Сначала вам нужно загрузить книгу.

library(openxlsx)

wb <- loadWorkbook("name_excel_file.xlsx")

Далее вам нужно извлечь имя вашей именованной таблицы.

# get the name and the range
tables <- getTables(wb = wb,
                    sheet = 1)

Если у вас есть несколько именованных таблиц, все они находятся в tables. Моя именованная таблица называется Table1.

Затем вам нужно извлечь номера столбцов и номеров строк, которые вы позже будете использовать для извлечения именованной таблицы из файла Excel.

# get the range
table_range <- names(tables[tables == "Table1"])
table_range_refs <- strsplit(table_range, ":")[[1]]

# use a regex to extract out the row numbers
table_range_row_num <- gsub("[^0-9.]", "", table_range_refs)
# extract out the column numbers
table_range_col_num <- convertFromExcelRef(table_range_refs)

Теперь вы перечитываете файл Excel с параметрами cols и rows.

# finally read it
my_df <- read.xlsx(xlsxFile = "name_excel_file.xlsx",
                   sheet = 1,
                   cols = table_range_col_num[1]:table_range_col_num[2],
                   rows = table_range_row_num[1]:table_range_row_num[2])

В итоге вы получите фрейм данных только с содержимым вашей именованной таблицы.

Я использовал это некоторое время назад. Я где-то нашел этот код, но уже не знаю, откуда.

person ricoderks    schedule 08.07.2020
comment
Спасибо буду определять. попробуй это. :) - person MelkorNO; 08.07.2020

Эта ссылка может быть полезной для вас

https://stackoverflow.com/a/17709204/10235327

1. Install XLConnect package
2. Save a path to your file in a variable
3. Load workbook
4. Save your data to df

Чтобы получить имена таблиц, вы можете использовать функцию

getTables(wb,sheet=1,simplify=T)

Где:

  • wb - ваша рабочая тетрадь
  • лист - имя листа или может быть номер
  • упростить = ИСТИНА (по умолчанию) результат упрощается до вектора

https://rdrr.io/cran/XLConnect/man/getTables-methods.html

Вот код (не мой, скопирован из темы выше, немного изменен)

require(XLConnect)
sampleFile = "C:/Users/your.name/Documents/test.xlsx"
wb = loadWorkbook(sampleFile)
myTable <- getTables(wb,sheet=1)
df<-readTable(wb, sheet = 1, table = myTable)
person AlexDinahl    schedule 08.07.2020
comment
Спасибо, это действительно решает мою проблему, хотя пакет XLConnect основан на Java, которую нам не разрешено устанавливать на ПК компании. :/ - person MelkorNO; 08.07.2020
comment
Пожалуйста! Да, все эти "не разрешенные к установке" относятся и к моей работе :) Но, может быть, они могут предоставить вам удаленный компьютер, где можно использовать java. - person AlexDinahl; 09.07.2020

Вы можете проверить следующие пакеты:

library(xlsx)
Data <- read.xlsx('YourFile.xlsx',sheet=1)

library(readxl)
Data <- read_excel('YourFile.xlsx',sheet=1)

Оба варианта позволяют определить определенные регионы для загрузки данных в R.

person Duck    schedule 08.07.2020

Я использую read.xlsx из пакета openxlsx. Например:

library(openxlsx)
fileA <- paste0(some.directory,'excel.file.xlsx')
A <-  read.xlsx(fileA, startRow = 3)

Надеюсь, поможет

person efz    schedule 08.07.2020
comment
Это то, что я делаю сейчас. Но это не решает проблему именованных таблиц в Excel. - person MelkorNO; 08.07.2020