Імпорт файлів 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.
Ari B. Friedman

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, надішліть електронною поштою супровідника пакету, щоб повідомити про можливу помилку.
Gavin Simpson

Це насправді залежить від даних та рівня сумісності, які вам потрібні між ОС. Як тільки у ваших ярликах чи факторах буде не-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

1
Я працюю з деякими досить великими книгами Excel, і openxlxs - це єдиний, хто може обробляти такі великі файли.
Jose R

На жаль, для цього потрібні "rtools"
Ферді

@Ferdi. не думай! Просто створити пакет один раз. Не для подальшого використання.
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, що займає багато часу та дуже нудно. Тому використання функції Шаона для автоматизації робочого процесу є суттєвою допомогою.

Великий реквізит Шауну для цього рішення.


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. Це може вирішити вашу проблему.


2

Ви перевірили, що R насправді може знайти файл, наприклад, file.exists ("C: /AB_DNA_Tag_Numbers.xlsx")? - Бен Болкер 14 серпня '11 о 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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.