Импорт файлов Excel в R, xlsx или xls

91

Пожалуйста, помогите мне найти лучший способ импортировать файл excel 2007 (.xlsx) в R. Я пробовал несколько методов, но ни один из них не работает. Я обновился до 2.13.1, windows XP, xlsx 0.3.0, я не знаю, почему ошибка продолжает появляться. Я старался:

AB<-read.xlsx("C:/AB_DNA_Tag_Numbers.xlsx","DNA_Tag_Numbers")

ИЛИ

AB<-read.xlsx("C:/AB_DNA_Tag_Numbers.xlsx",1)

но я получаю сообщение об ошибке:

 Error in .jnew("java/io/FileInputStream", file) : 
  java.io.FileNotFoundException: C:\AB_DNA_Tag_Numbers.xlsx (The system cannot find the file specified)

Спасибо.

нолюго
источник
4
Сколько раз ты это делаешь? Если хотя бы один раз, почти всегда лучше использовать Excel для экспорта в более открытый формат, например .csv.
Ари Б. Фридман,
gsk3: Да, или Google Docs, который поддерживает импорт Excel 2007 с '09: google.com/support/forum/p/Google%20Docs/… (Надеюсь, сейчас это работает хорошо.)
Бенджамин Аткин,
6
Какая это версия R? Какая операционная система? Какая версия read.xlsx? Вы читали руководство по публикации? </ripleybot>
Spacedman
2
Можете ли вы объяснить, чем этот вопрос отличается от stackoverflow.com/questions/6099243/…
Чейз
9
Вы проверили, что R действительно может найти файл, например file.exists("C:/AB_DNA_Tag_Numbers.xlsx")?
Бен Болкер,

Ответы:

104

Для решения, свободного от утомительных внешних зависимостей *, теперь есть readxl:

Пакет readxl позволяет легко получать данные из Excel в R. По сравнению со многими из существующих пакетов (например, gdata, xlsx, xlsReadWrite) readxl не имеет внешних зависимостей, поэтому его легко установить и использовать во всех операционных системах. Он предназначен для работы с табличными данными, хранящимися на одном листе.

Readxl поддерживает как устаревший формат .xls, так и современный формат .xlsx на основе xml. Поддержка .xls стала возможной благодаря библиотеке libxls C, которая абстрагирует многие сложности базового двоичного формата. Для синтаксического анализа .xlsx мы используем библиотеку RapidXML C ++.

Его можно установить так:

install.packages("readxl") # CRAN version

или

devtools::install_github("hadley/readxl") # development version

Применение

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. Но они не требуют возиться с путями и т. д., так что преимущество перед зависимостями Java и Perl.

Обновление Теперь есть пакет rexcel . Это обещает получить форматирование Excel, функции и многие другие виды информации из файла Excel в R.

Бен
источник
35

Вы также можете попробовать пакет XLConnect. Мне с ним повезло больше, чем с xlsx (к тому же он может читать файлы .xls).

library(XLConnect)
theData <- readWorksheet(loadWorkbook("C:/AB_DNA_Tag_Numbers.xlsx"),sheet=1)

также, если у вас возникли проблемы с тем, что ваш файл не был найден, попробуйте выбрать его с помощью file.choose ().

Ян Феллоуз
источник
7
Лучше, чем readWorksheet(loadWorkbook(...))вы можете сделать то же самое немного более кратко readWorksheetFromFile(...).
Хью
Это сработало на одном из моих проблемных листов, на котором read.xlsx разбился с "java.lang.IllegalArgumentException: индекс ячейки должен быть> = 0"
ski_squaw
23

Я бы определенно попробовал read.xlsфункцию в gdataпакете, который значительно более зрелый, чем xlsxпакет. Может потребоваться Perl ...

Бен Болкер
источник
21

Обновить

Поскольку ответ ниже теперь несколько устарел, я бы просто обратил внимание на пакет readxl . Если лист Excel хорошо отформатирован / разложен, я бы теперь использовал readxl для чтения из книги. Если листы плохо отформатированы / разложены, я все равно экспортирую в CSV, а затем решу проблемы в R либо через, read.csv()либо просто старый readLines().

Оригинал

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

Файлы CSV могут быть прочитаны в R с помощью read.csv()или, если вы находитесь в каком-либо месте или используете компьютер, настроенный с некоторыми европейскими настройками (где ,используется как десятичный разряд), используяread.csv2() .

У этих функций есть разумные значения по умолчанию, которые упрощают чтение правильно отформатированных файлов. Просто оставьте метки для образцов или переменных в первой строке или столбце.

Дополнительные преимущества хранения файлов в CSV заключаются в том, что, поскольку файлы представляют собой обычный текст, их можно очень легко передавать, и вы можете быть уверены, что они откроются где угодно; не требуется Excel для просмотра или редактирования данных.

Гэвин Симпсон
источник
6
CSV не поможет, так как книга содержит несколько листов, в каждом из которых до 100 тыс. Строк. Спасибо
nolyugo
7
Я сказал сохранять отдельные листы в виде файлов CSV - поскольку это обычный текст, размер листов не имеет значения. Если вы настаиваете на работе с книгами Excel, доступные варианты чтения данных в R становятся намного более сложными - альтернативы см. В пакетах RODBC, RDCOM. Наконец, если вы уверены, что выполнили инструкции по использованиюread.xlsx() и у вас есть последние версии этого пакета и R, отправьте электронное письмо сопровождающему пакета, чтобы сообщить о потенциальной ошибке.
Гэвин Симпсон,
Это действительно зависит от данных и уровня взаимодействия между ОС. Как только в ваших ярлыках или факторах появится не-ascii, и вам нужно будет работать с Mac / Win / Lin, различные странности начнут возникать, если вы экспортируете / импортируете в Excel и из него. Excel не может корректно обрабатывать utf-8 (или csv в этом отношении). В этом случае вы либо останетесь в Excel, либо перейдете в другое приложение для работы с электронными таблицами (последнее не всегда возможно).
FvD
18

Пример 2012:

library("xlsx")
FirstTable <- read.xlsx("MyExcelFile.xlsx", 1 , stringsAsFactors=F)
SecondTable <- read.xlsx("MyExcelFile.xlsx", 2 , stringsAsFactors=F)
  • Я бы попробовал пакет xlsx, потому что он прост в обращении и кажется достаточно зрелым
  • отлично работал у меня и не нуждался в дополнительных приложениях, таких как Perl или что-то еще

Пример 2015:

library("readxl")
FirstTable  <- read_excel("MyExcelFile.xlsx", 1)
SecondTable <- read_excel("MyExcelFile.xlsx", 2)
  • в настоящее время я использую readxl и имею хороший опыт работы с ним.
  • не нужно никаких дополнительных вещей
  • хорошее исполнение
Петермейсснер
источник
14

Этот новый пакет выглядит красиво http://cran.r-project.org/web/packages/openxlsx/openxlsx.pdf Он не требует rJava и для скорости использует Rcpp.

RockScience
источник
и он находится в активной разработке
RockScience
1
Я работаю с некоторыми довольно большими книгами Excel, и openxlxs - почти единственный, который может обрабатывать такие большие файлы.
Jose R
К сожалению, для этого требуются "rtools"
Ферди
@ Ферди. не думаю! Просто создать пакет один раз. Не для дальнейшего использования.
RockScience
5

Если вы столкнулись с той же проблемой и R выдает ошибку - не удалось найти функцию ".jnew" - просто установите библиотеку rJava. Или, если он у вас уже есть, просто запустите линейную библиотеку (rJava). Это должно быть проблемой.

Кроме того, всем должно быть ясно, что с файлами csv и txt легче работать, но жизнь нелегка, и иногда вам просто нужно открыть xlsx.

Вилмер Э. Энао
источник
1
когда я загружаю версию 2.8.2, gdataя получаю сообщение о запуске. gdata: read.xls support for 'XLSX' (Excel 2007+) files ENABLED.Мне кажется, он должен открывать файлы xlsx, хотя, по общему признанию, я не тестировал его в последнее время ...
Бен Болкер,
1
Могу подтвердить, что gdataверсия 2.8.2 читает xlsxфайлы с read.xlsфункцией.
Бен
4

Недавно я обнаружил функцию Шауна Уиллера для импорта файлов Excel в R после того, как понял, что пакет xlxs не был обновлен для R 3.1.0.

https://gist.github.com/schaunwheeler/5825002

Имя файла должно иметь расширение «.xlsx», и файл не может быть открыт при запуске функции.

Эта функция действительно полезна для доступа к работе других людей. Основные преимущества перед использованием функции read.csv:

  • Импорт нескольких файлов Excel
  • Импорт больших файлов
  • Файлы, которые регулярно обновляются

Использование функции read.csv требует ручного открытия и сохранения каждого документа Excel, что отнимает много времени и очень утомительно. Поэтому использование функции Schaun для автоматизации рабочего процесса очень помогает.

Большое спасибо Шауну за это решение.

Джонно Борн
источник
4

Для меня пакет openxlx работал самым простым способом.

install.packages("openxlsx")
library(openxlsx)
rawData<-read.xlsx("your.xlsx");
Хенрик Бата
источник
2

Какая у вас операционная система? Какую версию R вы используете: 32-битную или 64-битную? Какая версия Java у вас установлена?

У меня была аналогичная ошибка, когда я впервые начал использовать read.xlsx()функцию и обнаружил, что моя проблема (которая может быть связана или не связана с вашей; как минимум, этот ответ следует рассматривать как «попробуйте это тоже») была связана с несовместимостью пакета .xlsx с 64-битной Java. Я почти уверен, что для пакета .xlsx требуется 32-битная Java.

Используйте 32-битный R и убедитесь, что установлена ​​32-битная Java. Это может решить вашу проблему.

user2755425
источник
2

Вы проверили, действительно ли R может найти файл, например file.exists ("C: /AB_DNA_Tag_Numbers.xlsx")? - Бен Болкер, 14 августа 2011, 23:05

Приведенный выше комментарий должен был решить вашу проблему:

require("xlsx")
read.xlsx("filepath/filename.xlsx",1) 

после этого должен работать нормально.

противоречие
источник
1

Вы можете сохранить несколько вкладок и дополнительную информацию о форматировании, если экспортируете файл электронной таблицы OpenDocument ( ods ) или более старый формат Excel и импортируете его с помощью программы чтения ODS или программы чтения Excel, о которой вы упоминали выше.

Бенджамин Аткин
источник
1

Как здесь многие говорят, я пишу то же самое, но с дополнительным пунктом!

Сначала нам нужно убедиться, что в нашей R Studio установлены эти два пакета:

  1. "readxl"
  2. «XLConnect»

Чтобы загрузить пакет в R, вы можете использовать следующую функцию:

install.packages("readxl/XLConnect")
library(XLConnect)
search()

search отобразит список текущих пакетов, доступных в вашей R Studio.

Теперь еще одна загвоздка, даже если у вас могут быть эти два пакета, но вы все равно можете столкнуться с проблемой при чтении файла «xlsx», и ошибка может выглядеть как «ошибка: столбцов больше, чем имя столбца»

Чтобы решить эту проблему, вы можете просто повторно сохранить лист Excel "xlsx" в

"CSV (с разделителями-запятыми)"

и твоя жизнь будет супер легкой ....

Радоваться, веселиться!!

Раджив Кумар Барнвал
источник
1

Я очень старался ответить на все приведенные выше ответы. Однако на самом деле они не помогли, потому что я использовал Mac. В rio имеет эту функцию импорта, которая может импортировать любой тип файла данных в Rstudio. , даже если этот файл использует языки, отличные от английского!

Попробуйте коды ниже:

    library(rio)
    AB <- import("C:/AB_DNA_Tag_Numbers.xlsx")
    AB <- AB[,1]

Надеюсь на эту помощь. Для более подробной информации: https://cran.r-project.org/web/packages/rio/vignettes/rio.html

Суян Сюй
источник