Многие
люди хранят свои данные в файлах Microsoft Excel. Это не очень удачный
выбор по многим причинам, но к сожалению, Excel уже стал стандартом
де-факто во многих бизнес-приложениях, поэтому необходимо с этим
считаться.
Для чтения файлов Excel в R было
предложено множество решений, каждое со своими преимуществами и
недостатками, но универсального решения пока нет. Ниже приведен обзор
всех известных мне решений, чтобы вы могли сами выбрать подходящее вашим
нуждам.
Сохранение файлов Excel в виде текста
Сохранив файл Excel в формате CSV, можно использовать для импорта данных нативные функции R:
read.table"myfile.csv", header TRUE
|
Копирование и вставка из Excel в R
Это
быстрое решение, но имеющее свои недостатки: вам необходимо отрыть файл
Excel, выделить данные и скопировать их в буфер обмена. Но если вы
торопитесь, то это наилучший выбор.
read.table"clipboard"
|
Соединение ODBC
В
течение многих лет это было самое простое решение на базе кода R для
пользователей Windows. Сейчас оно все еще поддерживается для 32-битных
версий R. Помимо Microsoft Windows и 32-битного дистрибутива R требуется
также установленный драйвер Excel ODBC.
require(RODBC) conn = odbcConnectExcel("myfile.xlsx") # open a connection to the Excel file sqlTables(conn)$TABLE_NAME # show all sheets df = sqlFetch(conn, "Sheet1") # read a sheet df = sqlQuery(conn, "select * from [Sheet1 $]") # read a sheet (alternative SQL sintax) close(conn) # close the connection to the file |
Пакет gdata
По
моему опыту функция, предлагаемая пакетом gdata, является хорошим
кроссплатформенным решением. Она доступна в Windows, Mac и Linux. gdata
требует, чтобы у вас были установлены дополнительные библиотеки Perl.
Обычно Perl уже установлен в Linux и Mac, но в Windows это может
потребовать дополнительных усилий.
require(gdata) df = read.xls ("myfile.xlsx"), sheet = 1, header = TRUE) |
Пакет xlsReadWrite
xlsReadWrite
приведен здесь только для полноты картины, хотя он и очень быстр: он не
поддерживает файлы формата .xlsx, а в настоящее время это неприемлемо.
Кроме того, он использует сторонний код, который необходимо скачивать с
GitHub. Этот пакет доступен только в Windows.
require(xlsReadWrite) xls.getshlib() df = read.xls("myfile.xls", sheet = 1) |
Пакет XLConnect
XLConnect
- это решение на базе Java, поэтому он кроссплатформенный и показывает
удовлетворительные результаты. При больших объемах данных он может быть
очень медленным.
require(XLConnect) wb = loadWorkbook("myfile.xlsx") df = readWorksheet(wb, sheet = "Sheet1", header = TRUE) |
Пакет xlsx
Пакет
xlsx читает (и записывает) файлы .xlsx и .xls, используя Java. Он
кроссплатформенный и использует rJava для взаимодействия с Java.
Приведенные ниже комментарии и примеры взяты из ответа с stackoverflow. Этот пакет обеспечивает, вероятно, наилучшие результаты, но требует знания достаточно большого количества опций.
Однако
функция read.xlsx() при открытии больших файлов может работать
достаточно медленно. Функция read.xlsx2() работает значительно быстрее,
но не определяет класс vector для столбцов data.frame. Если вы
используете функцию read.xlsx2(), вам необходимо задавать требуемые
классы столбцов с помощью команды colClasses().
require(xlsx) read.xlsx("myfile.xlsx", sheetName = "Sheet1") read.xlsx2("myfile.xlsx", sheetName = "Sheet1") |
require(xlsx) coln = function(x) { # A function to see column numbers y = rbind(seq(1, ncol(x))) colnames(y) = colnames(x) rownames(y) = "col.number" return(y) } data = read.xlsx2("myfile.xlsx", 1) # open the file coln(data) # check the column numbers you want to have as factors x = 3 # Say you want columns 1-3 as factors, the rest numeric data = read.xlsx2("myfile.xlsx", 1, colClasses = c(rep("character", x), rep("numeric", ncol(data)-x+1)) ) |
Написанные собственноручно функции
В
конце концов я нашел сайт с самодельной функцией для быстрого импорта
файлов xlsx. Она должна работать на любой платформе и использует XML.
Она не работает со старыми файлами формата xls. Функция позволяет читать
несколько таблиц из файла одновременно с помощью аргумента keep_sheets.
source("https://gist.github.com/schaunwheeler/5825002/raw/3526a15b032c06392740e20 b6c9a179add2cee49/xlsxToR.r") xlsxToR = function("myfile.xlsx", header = TRUE)
|
Я
для работы с R всегда предпочитал использовать файлы в формате csv. Но
для небольших наборов данных или для тестовых задач для себя я выбрал
XLConnect.
Перевод. Оригинал здесь.
Комментариев нет:
Отправить комментарий