@Sacha Epskamp: с xlsReadWrite вам даже не нужно устанавливать Perl.
Джорис Мейс
1
gdataверсия 2.8.2 читает xlsxфайлы с read.xlsфункцией
Бен
1
См. Мое предупреждение (как ответ ниже) относительно возможной потери точности при экспорте данных в текстовый формат из Excel.
russellpierce
1
xlsxпакет для xlsx / xlsm / xls, не знаю о xlam и т. д.
Qbik
2
«Я никогда не вижу причин не экспортировать сначала в текстовый файл». Как насчет этого: при экспорте в CSV одно из нужных мне полей не записывается. Это похоже на какую-то DRM, но так как я не писал электронную таблицу, я не знаю.
Нейт Рид,
Ответы:
41
Да. См. Соответствующую страницу в R-вики . Краткий ответ: пакет read.xlsfrom the gdatapackage работает большую часть времени (хотя в вашей системе должен быть установлен Perl - обычно это уже верно для MacOS и Linux, но требует дополнительного шага в Windows, например, см. Http://strawberryperl.com/ ). Существуют различные предостережения и альтернативы, перечисленные на вики-странице R.
Единственная причина, по которой я не вижу этого напрямую, заключается в том, что вы можете проверить электронную таблицу, чтобы увидеть, есть ли в ней сбои (странные заголовки, несколько листов [вы можете читать только по одному, хотя вы, очевидно, можете перебирать их все] , включенные участки и др.). Но для хорошо сформированной прямоугольной таблицы с простыми числами и символьными данными (т.е. числами, датами, формулами без запятых, ошибками деления на ноль, пропущенными значениями и т. Д. И т. Д.) У меня обычно нет проблем. с этим процессом.
Есть много потенциальных проблем, с которыми я столкнулся лично. Поля с числами с запятыми необходимо удалить и преобразовать в числовые в R. Поля со знаком «-» необходимо перекодировать в NA. Общая рекомендация - внимательно посмотреть на свои числа в Excel и убедиться, что они правильно переводятся в R.
Брэндон Бертельсен
3
Не могу поспорить с «вам действительно нужно посмотреть на свои числа» ... в чем проблема с полями «-»? ли na.strings="-"решение проблемы? Сколько из этих проблем являются общими и сколько из них (например, числовые поля с запятыми) можно решить с помощью других инструментов, таких как XLConnect ...?
Бен Болкер
1
Этот комментарий был адресован OP, а не вам, Бен, я виноват в плохом размещении.
Брэндон Бертельсен
1
Соответствующий анекдот: read.xlsудалось прочитать очень большой лист из файла Excel, где оба XLConnectи xlsxне смогли (я считаю, потому что они оба полагаются на Apache POI )
Мэтт Паркер
49
Позвольте мне повторить то, что рекомендовал @Chase: используйте XLConnect .
На мой взгляд, причины использования XLConnect:
Кросс-платформа. XLConnect написан на Java и, таким образом, будет работать в Win, Linux, Mac без изменения вашего кода R (кроме, возможно, строк пути)
Больше нечего загружать. Просто установите XLConnect и продолжайте жить.
Вы упомянули только чтение файлов Excel, но XLConnect также будет записывать файлы Excel, включая изменение форматирования ячеек. И он будет делать это из Linux или Mac, а не только из Win.
XLConnect является несколько новым по сравнению с другими решениями, поэтому он реже упоминается в сообщениях блогов и справочной документации. Для меня это было очень полезно.
Пакет readxl позволяет легко получать данные из Excel в R. По сравнению с существующими пакетами (например, gdata, xlsx, xlsReadWrite и т.д.) readxl не имеет внешних зависимостей, поэтому его легко установить и использовать во всех операционных системах. Он предназначен для работы с табличными данными, хранящимися на одном листе.
readxl построен на основе библиотеки libxls C, которая абстрагирует многие сложности базового двоичного формата.
Он поддерживает как устаревший формат .xls, так и .xlsx.
readxl доступен из CRAN, или вы можете установить его из github с помощью:
library(readxl)# read_excel reads both xls and xlsx files
read_excel("my-old-spreadsheet.xls")
read_excel("my-new-spreadsheet.xlsx")# Specify sheet with a number or name
read_excel("my-spreadsheet.xls", sheet ="data")
read_excel("my-spreadsheet.xls", sheet =2)# If NAs are represented by something other than blank cells,# set the na argument
read_excel("my-spreadsheet.xls", na ="NA")
Обратите внимание, что хотя в описании говорится «нет внешних зависимостей», для него требуется Rcppпакет , который, в свою очередь, требует Rtools (для Windows) или Xcode (для OSX), которые являются зависимостями, внешними по отношению к R. Хотя многие люди устанавливают их по другим причинам. .
Намного быстрее, чем xlsx. Время чтения похоже на read.xlsx2, но оно определяет типы.
Стив Роу
1
@SteveRowe см. Новый ответ на некоторые (предпринятые) объективные тесты, подтверждающие это
MichaelChirico
Есть ли способ читать строки как факторы с помощью read_excel? Мне нравится скорость по сравнению с read.xlsx, но необходимость вручную преобразовывать столбцы из символов в факторы лишает цели.
Coip
2
+1 за то, что не имеет зависимостей. Ненавижу устанавливать java. И я попробовал, и у меня это очень хорошо работает.
Bastian
2
readxl и openxlsx - лучшие. readxl быстрее, но не позволяет писать. В любом случае, ни один из них не работает хорошо при попытке указать классы / типы столбцов.
skan
29
EDIT 2015-октябрь: Как и другие отметили здесь openxlsxи readxlпакеты гораздо быстрее , чем xlsxпакет , и на самом деле удается открыть большие файлы Excel (> 1500 строк и столбцов> 120). @MichaelChirico демонстрирует, что readxlлучше, когда предпочтительна скорость, и openxlsxзаменяет функциональность, предоставляемую xlsxпакетом. Если вы ищете пакет для чтения, записи и изменения файлов Excel в 2015 году, выберите openxlsxвместо xlsx.
До 2015 года: я использовал xlsxpackage . Это изменило мой рабочий процесс с Excel и R. Больше никаких раздражающих всплывающих окон с вопросом, уверен ли я, что хочу сохранить свой лист Excel в формате .txt. Пакет также записывает файлы Excel.
Однако я считаю, что read.xlsxфункция работает медленно при открытии больших файлов Excel. read.xlsx2функция значительно быстрее, но не запрашивает векторный класс столбцов data.frame. Вы должны использовать colClassesкоманду, чтобы указать желаемые классы столбцов, если вы используете read.xlsx2функцию. Вот практический пример:
read.xlsx("filename.xlsx", 1)читает ваш файл и делает классы столбцов data.frame почти полезными, но очень медленно для больших наборов данных. Работает также для .xlsфайлов.
read.xlsx2("filename.xlsx", 1)быстрее, но вам придется определять классы столбцов вручную. Ярлык - выполнить команду дважды (см. Пример ниже). characterспецификация преобразует ваши столбцы в факторы. Использование Dateи POSIXctварианты на время.
coln <-function(x){y <- rbind(seq(1,ncol(x))); colnames(y)<- colnames(x)
rownames(y)<-"col.number";return(y)}# A function to see column numbers
data <- read.xlsx2("filename.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("filename.xlsx",1, colClasses= c(rep("character", x),
rep("numeric", ncol(data)-x+1)))
Учитывая распространение различных способов чтения файла Excel Rи множество ответов здесь, я подумал, что попытаюсь пролить свет на то, какой из упомянутых здесь вариантов работает лучше всего (в нескольких простых ситуациях).
Я сам использую xlsxс тех пор, как начал использовать R, по инерции, если ничего другого, и недавно я заметил, что нет никакой объективной информации о том, какой пакет работает лучше.
Любое упражнение по сравнительному анализу сопряжено с трудностями, поскольку одни пакеты обязательно справятся с определенными ситуациями лучше, чем другие, и множество других предостережений.
Тем не менее, я использую (воспроизводимый) набор данных, который, на мой взгляд, имеет довольно распространенный формат (8 строковых полей, 3 числовых, 1 целое число, 3 даты):
set.seed(51423)
data.frame(
str1 = sample(sprintf("%010d",1:NN)),#ID field 1
str2 = sample(sprintf("%09d",1:NN)),#ID field 2#varying length string field--think names/addresses, etc.
str3 =
replicate(NN, paste0(sample(LETTERS, sample(10:30,1L),TRUE),
collapse ="")),#factor-like string field with 50 "levels"
str4 = sprintf("%05d", sample(sample(1e5,50L), NN,TRUE)),#factor-like string field with 17 levels, varying length
str5 =
sample(replicate(17L, paste0(sample(LETTERS, sample(15:25,1L),TRUE),
collapse ="")), NN,TRUE),#lognormally distributed numeric
num1 = round(exp(rnorm(NN, mean =6.5, sd =1.5)),2L),#3 binary strings
str6 = sample(c("Y","N"), NN,TRUE),
str7 = sample(c("M","F"), NN,TRUE),
str8 = sample(c("B","W"), NN,TRUE),#right-skewed integer
int1 = ceiling(rexp(NN)),#dates by month
dat1 =
sample(seq(from = as.Date("2005-12-31"),
to = as.Date("2015-12-31"), by ="month"),
NN,TRUE),
dat2 =
sample(seq(from = as.Date("2005-12-31"),
to = as.Date("2015-12-31"), by ="month"),
NN,TRUE),
num2 = round(exp(rnorm(NN, mean =6, sd =1.5)),2L),#date by day
dat3 =
sample(seq(from = as.Date("2015-06-01"),
to = as.Date("2015-07-15"), by ="day"),
NN,TRUE),#lognormal numeric that can be positive or negative
num3 =(-1)^ sample(2, NN,TRUE)* round(exp(rnorm(NN, mean =6, sd =1.5)),2L))
Затем я написал это CSV - файл и открыт в LibreOffice и сохранил его как .xlsx файл, а затем протестировал 4 пакетов , упомянутых в этой теме: xlsx, openxlsx, readxl, и gdata, используя параметры по умолчанию (я также попробовал версию ли я или нет указать типы столбцов, но это не изменило ранжирование).
Я исключаю, RODBCпотому что я использую Linux; XLConnectпотому что кажется, что его основная цель - не чтение отдельных листов Excel, а импорт целых книг Excel, поэтому ставить свою лошадь в гонку только на ее способностях чтения кажется несправедливым; и xlsReadWriteпотому, что он больше не совместим с моей версией R(похоже, был прекращен).
Затем я провел тесты с NN=1000Lи NN=25000L(сбрасывая начальное число перед каждым объявлением data.frameвыше), чтобы учесть различия в размере файла Excel. gcв первую очередь для того xlsx, что, как я обнаружил, иногда может создавать засорение памяти. Без лишних слов, вот результаты, которые я нашел:
Таков readxlявный победитель, когда дело касается скорости. gdataЛучше найдите для этого что-нибудь еще, так как чтение файлов Excel мучительно медленно, и эта проблема только усугубляется для больших таблиц.
Двумя недостатками openxlsxявляются: 1) его обширные другие методы ( readxlпредназначены только для одного, что, вероятно, является частью того, почему он такой быстрый), особенно его write.xlsxфункция, и 2) (больше недостаток readxl) col_typesаргумент readxlтолько (как этого текста) принимает нестандартные R: "text"вместо "character"и "date"вместо "Date".
Было бы здорово, если бы вы также добавили тест для XLConnect. Также прокомментируйте, что readxl не может писать. xlsx и openxlsx не работают должным образом с опцией col_types или colClasses.
skan
@skan Сначала я провел несколько тестов, XLConnectно он очень медленный; Я считаю, readxlчто недостатки были достаточно освещены в моем последнем абзаце; и у меня нет подобного опыта в ваш с xlsxили openxlsxкак я регулярно использовать как для определения типов.
В других сетях SE этот ответ будет закрыт, так как он предназначен только для ссылок.
luchonacho
13
library(RODBC)
file.name <-"file.xls"
sheet.name <-"Sheet Name"## Connect to Excel File Pull and Format Data
excel.connect <- odbcConnectExcel(file.name)
dat <- sqlFetch(excel.connect, sheet.name, na.strings=c("","-"))
odbcClose(excel.connect)
Лично мне нравится RODBC, и я могу его рекомендовать.
Другим решением является xlsReadWriteпакет, который не требует дополнительных установок, но требует, чтобы вы загрузили дополнительный shlib перед его первым использованием:
require(xlsReadWrite)
xls.getshlib()
Если вы забудете об этом, это приведет к полному разочарованию. Был там и все такое ...
На заметку: вы можете рассмотреть возможность преобразования в текстовый формат (например, csv) и читать оттуда. Это по ряду причин:
независимо от вашего решения (RODBC, gdata, xlsReadWrite) могут произойти некоторые странные вещи, когда ваши данные будут преобразованы. Особенно финики могут быть довольно громоздкими. В HFWutilsпакете есть некоторые инструменты для работы с датами EXCEL (согласно комментарию @Ben Bolker).
если у вас большие листы, чтение текстовых файлов происходит быстрее, чем чтение из EXCEL.
для файлов .xls и .xlsx могут потребоваться другие решения. НАПРИМЕР, пакет xlsReadWrite в настоящее время не поддерживает .xlsx AFAIK. gdataтребует, чтобы вы установили дополнительные библиотеки Perl для поддержки .xlsx. xlsxpackage может обрабатывать одноименные расширения.
@Ben Спасибо за совет, я включу его в свой ответ. Однако я не пытался быть полным, так как страница вики, на которую ссылается принятый ответ, уже довольно полная. Но здесь не упоминается пакет HFWutils.
Джорис Мейс
1
-1; Смотрите мой ответ. TL: DR: Excel не сохраняет набор данных полной точности в CSV (или в буфер обмена). Сохраняются только видимые значения.
russellpierce
5
Как отмечалось выше во многих других ответах, есть много хороших пакетов, которые подключаются к файлу XLS / X и получают данные разумным способом. Однако вы должны быть предупреждены, что ни при каких обстоятельствах вы не должны использовать файл буфера обмена (или файл .csv) для извлечения данных из Excel. Чтобы понять, почему, войдите =1/3в ячейку в Excel. Теперь уменьшите количество видимых вам десятичных знаков до двух. Затем скопируйте и вставьте данные в R. Теперь сохраните CSV. Вы заметите, что в обоих случаях Excel помогает сохранить только те данные, которые были видны вам через интерфейс, и вы потеряли всю точность ваших фактических исходных данных.
Я хотел бы знать, кто считал, что числовая точность не важна.
russellpierce
1
Хорошее предупреждение. Однако это зависит от используемого вами пакета. некоторые не попадают в эту ловушку.
RockScience,
@RocketScience Это фундаментальный выбор дизайна при экспорте CSV в Excel. У вас есть пример пакета, который использует буфер обмена и не имеет этой проблемы? Пакеты, непосредственно анализирующие файл xls xlsx, могут не попасть в эту ловушку. Итак, конкретная сфера действия моего предупреждения.
russellpierce
на Unix можно попробовать gnumeric::read.gnumeric.sheet. В Windows я не уверен на 100%, но я думаю, что он gdata::read.xlsтакже должен работать хорошо (хотя нужно установить perl)
RockScience
@RockScience С уважением, gdata :: read.xls не работает с данными из буфера обмена (если вы не мешаете ему), а gnumeric - это не Excel. Итак, в отсутствие экстраординарных доказательств мое предупреждение остается в силе. Есть так много других хороших вариантов ответа на этот вопрос - будем надеяться, что люди воспользуются ими.
russellpierce
5
Расширяя ответ, предоставленный @Mikko, вы можете использовать изящный трюк, чтобы ускорить процесс, без необходимости «знать» классы столбцов заранее. Просто используйте read.xlsxдля получения ограниченного количества записей для определения классов, а затем выполнитеread.xlsx2
пример
# just the first 50 rows should do...
df.temp <- read.xlsx("filename.xlsx",1, startRow=1, endRow=50)
df.real <- read.xlsx2("filename.xlsx",1,
colClasses=as.vector(sapply(df.temp, mode)))
Ваше решение возвращается numericна factorsна моем компьютере. read.xlsxиспользуется characterв readColumnsфункции для указания факторов. Я уверен , что есть более удобный способ получения факторов , как героев, но здесь представляет собой модифицированную версию вашей функции , которая работает: df.real <- read.xlsx2("filename.xlsx", 1, colClasses=gsub("factor", "character", as.vector(sapply(df.temp, class)))).
Mikko
Это работает только в той степени, в которой тип столбца может быть адекватно определен по первой строке. Обычно, чтобы сделать это определение, анализируется больше, чем первая строка. Ответ можно улучшить, обратившись к комментарию aaa90210, указав пакет, из которого берутся эти функции.
russellpierce
1
Файл Excel можно прочитать непосредственно в R следующим образом:
gdata
версия 2.8.2 читаетxlsx
файлы сread.xls
функциейxlsx
пакет для xlsx / xlsm / xls, не знаю о xlam и т. д.Ответы:
Да. См. Соответствующую страницу в R-вики . Краткий ответ: пакет
read.xls
from thegdata
package работает большую часть времени (хотя в вашей системе должен быть установлен Perl - обычно это уже верно для MacOS и Linux, но требует дополнительного шага в Windows, например, см. Http://strawberryperl.com/ ). Существуют различные предостережения и альтернативы, перечисленные на вики-странице R.Единственная причина, по которой я не вижу этого напрямую, заключается в том, что вы можете проверить электронную таблицу, чтобы увидеть, есть ли в ней сбои (странные заголовки, несколько листов [вы можете читать только по одному, хотя вы, очевидно, можете перебирать их все] , включенные участки и др.). Но для хорошо сформированной прямоугольной таблицы с простыми числами и символьными данными (т.е. числами, датами, формулами без запятых, ошибками деления на ноль, пропущенными значениями и т. Д. И т. Д.) У меня обычно нет проблем. с этим процессом.
источник
na.strings="-"
решение проблемы? Сколько из этих проблем являются общими и сколько из них (например, числовые поля с запятыми) можно решить с помощью других инструментов, таких как XLConnect ...?read.xls
удалось прочитать очень большой лист из файла Excel, где обаXLConnect
иxlsx
не смогли (я считаю, потому что они оба полагаются на Apache POI )Позвольте мне повторить то, что рекомендовал @Chase: используйте XLConnect .
На мой взгляд, причины использования XLConnect:
XLConnect является несколько новым по сравнению с другими решениями, поэтому он реже упоминается в сообщениях блогов и справочной документации. Для меня это было очень полезно.
источник
А теперь есть readxl :
использование
Обратите внимание, что хотя в описании говорится «нет внешних зависимостей», для него требуется
Rcpp
пакет , который, в свою очередь, требует Rtools (для Windows) или Xcode (для OSX), которые являются зависимостями, внешними по отношению к R. Хотя многие люди устанавливают их по другим причинам. .источник
read_excel
? Мне нравится скорость по сравнению сread.xlsx
, но необходимость вручную преобразовывать столбцы из символов в факторы лишает цели.EDIT 2015-октябрь: Как и другие отметили здесь
openxlsx
иreadxl
пакеты гораздо быстрее , чемxlsx
пакет , и на самом деле удается открыть большие файлы Excel (> 1500 строк и столбцов> 120). @MichaelChirico демонстрирует, чтоreadxl
лучше, когда предпочтительна скорость, иopenxlsx
заменяет функциональность, предоставляемуюxlsx
пакетом. Если вы ищете пакет для чтения, записи и изменения файлов Excel в 2015 году, выберитеopenxlsx
вместоxlsx
.До 2015 года: я использовал
xlsx
package . Это изменило мой рабочий процесс с Excel и R. Больше никаких раздражающих всплывающих окон с вопросом, уверен ли я, что хочу сохранить свой лист Excel в формате .txt. Пакет также записывает файлы Excel.Однако я считаю, что
read.xlsx
функция работает медленно при открытии больших файлов Excel.read.xlsx2
функция значительно быстрее, но не запрашивает векторный класс столбцов data.frame. Вы должны использоватьcolClasses
команду, чтобы указать желаемые классы столбцов, если вы используетеread.xlsx2
функцию. Вот практический пример:read.xlsx("filename.xlsx", 1)
читает ваш файл и делает классы столбцов data.frame почти полезными, но очень медленно для больших наборов данных. Работает также для.xls
файлов.read.xlsx2("filename.xlsx", 1)
быстрее, но вам придется определять классы столбцов вручную. Ярлык - выполнить команду дважды (см. Пример ниже).character
спецификация преобразует ваши столбцы в факторы. ИспользованиеDate
иPOSIXct
варианты на время.источник
Учитывая распространение различных способов чтения файла Excel
R
и множество ответов здесь, я подумал, что попытаюсь пролить свет на то, какой из упомянутых здесь вариантов работает лучше всего (в нескольких простых ситуациях).Я сам использую
xlsx
с тех пор, как начал использоватьR
, по инерции, если ничего другого, и недавно я заметил, что нет никакой объективной информации о том, какой пакет работает лучше.Любое упражнение по сравнительному анализу сопряжено с трудностями, поскольку одни пакеты обязательно справятся с определенными ситуациями лучше, чем другие, и множество других предостережений.
Тем не менее, я использую (воспроизводимый) набор данных, который, на мой взгляд, имеет довольно распространенный формат (8 строковых полей, 3 числовых, 1 целое число, 3 даты):
Затем я написал это CSV - файл и открыт в LibreOffice и сохранил его как .xlsx файл, а затем протестировал 4 пакетов , упомянутых в этой теме:
xlsx
,openxlsx
,readxl
, иgdata
, используя параметры по умолчанию (я также попробовал версию ли я или нет указать типы столбцов, но это не изменило ранжирование).Я исключаю,
RODBC
потому что я использую Linux;XLConnect
потому что кажется, что его основная цель - не чтение отдельных листов Excel, а импорт целых книг Excel, поэтому ставить свою лошадь в гонку только на ее способностях чтения кажется несправедливым; иxlsReadWrite
потому, что он больше не совместим с моей версиейR
(похоже, был прекращен).Затем я провел тесты с
NN=1000L
иNN=25000L
(сбрасывая начальное число перед каждым объявлениемdata.frame
выше), чтобы учесть различия в размере файла Excel.gc
в первую очередь для тогоxlsx
, что, как я обнаружил, иногда может создавать засорение памяти. Без лишних слов, вот результаты, которые я нашел:Файл Excel на 1000 строк
Так
readxl
же и победитель, если естьopenxlsx
соревнование иgdata
явный проигравший. Принимая каждую меру относительно минимума столбца:Видим свою любимую,
xlsx
на 60% медленнееreadxl
.Файл Excel на 25000 строк
Из-за большого количества времени я сделал только 20 повторов для большого файла, в остальном команды были идентичны. Вот исходные данные:
Вот относительные данные:
Таков
readxl
явный победитель, когда дело касается скорости.gdata
Лучше найдите для этого что-нибудь еще, так как чтение файлов Excel мучительно медленно, и эта проблема только усугубляется для больших таблиц.Двумя недостатками
openxlsx
являются: 1) его обширные другие методы (readxl
предназначены только для одного, что, вероятно, является частью того, почему он такой быстрый), особенно егоwrite.xlsx
функция, и 2) (больше недостатокreadxl
)col_types
аргументreadxl
только (как этого текста) принимает нестандартныеR
:"text"
вместо"character"
и"date"
вместо"Date"
.источник
XLConnect
но он очень медленный; Я считаю,readxl
что недостатки были достаточно освещены в моем последнем абзаце; и у меня нет подобного опыта в ваш сxlsx
илиopenxlsx
как я регулярно использовать как для определения типов.Мне повезло
XLConnect
: http://cran.r-project.org/web/packages/XLConnect/index.htmlисточник
Лично мне нравится RODBC, и я могу его рекомендовать.
источник
Просто
openxlsx
попробовал посылку сегодня. Это сработало очень хорошо (и быстро).http://cran.r-project.org/web/packages/openxlsx/index.html
источник
Другим решением является
xlsReadWrite
пакет, который не требует дополнительных установок, но требует, чтобы вы загрузили дополнительный shlib перед его первым использованием:Если вы забудете об этом, это приведет к полному разочарованию. Был там и все такое ...
На заметку: вы можете рассмотреть возможность преобразования в текстовый формат (например, csv) и читать оттуда. Это по ряду причин:
независимо от вашего решения (RODBC, gdata, xlsReadWrite) могут произойти некоторые странные вещи, когда ваши данные будут преобразованы. Особенно финики могут быть довольно громоздкими. В
HFWutils
пакете есть некоторые инструменты для работы с датами EXCEL (согласно комментарию @Ben Bolker).если у вас большие листы, чтение текстовых файлов происходит быстрее, чем чтение из EXCEL.
для файлов .xls и .xlsx могут потребоваться другие решения. НАПРИМЕР, пакет xlsReadWrite в настоящее время не поддерживает .xlsx AFAIK.
gdata
требует, чтобы вы установили дополнительные библиотеки Perl для поддержки .xlsx.xlsx
package может обрабатывать одноименные расширения.источник
Как отмечалось выше во многих других ответах, есть много хороших пакетов, которые подключаются к файлу XLS / X и получают данные разумным способом. Однако вы должны быть предупреждены, что ни при каких обстоятельствах вы не должны использовать файл буфера обмена (или файл .csv) для извлечения данных из Excel. Чтобы понять, почему, войдите
=1/3
в ячейку в Excel. Теперь уменьшите количество видимых вам десятичных знаков до двух. Затем скопируйте и вставьте данные в R. Теперь сохраните CSV. Вы заметите, что в обоих случаях Excel помогает сохранить только те данные, которые были видны вам через интерфейс, и вы потеряли всю точность ваших фактических исходных данных.источник
gnumeric::read.gnumeric.sheet
. В Windows я не уверен на 100%, но я думаю, что онgdata::read.xls
также должен работать хорошо (хотя нужно установить perl)Расширяя ответ, предоставленный @Mikko, вы можете использовать изящный трюк, чтобы ускорить процесс, без необходимости «знать» классы столбцов заранее. Просто используйте
read.xlsx
для получения ограниченного количества записей для определения классов, а затем выполнитеread.xlsx2
пример
источник
numeric
наfactors
на моем компьютере.read.xlsx
используетсяcharacter
вreadColumns
функции для указания факторов. Я уверен , что есть более удобный способ получения факторов , как героев, но здесь представляет собой модифицированную версию вашей функции , которая работает:df.real <- read.xlsx2("filename.xlsx", 1, colClasses=gsub("factor", "character", as.vector(sapply(df.temp, class))))
.Файл Excel можно прочитать непосредственно в R следующим образом:
Чтение файлов xls и xlxs с использованием пакета readxl
источник