Importowanie plików Excela do R, xlsx lub xls

91

Czy ktoś może mi pomóc w wyborze najlepszego sposobu importowania pliku programu Excel 2007 (.xlsx) do R. Próbowałem kilku metod i żadna z nich nie działa. Zaktualizowałem do 2.13.1, windows XP, xlsx 0.3.0, nie wiem, dlaczego błąd ciągle się pojawia. Próbowałem:

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

LUB

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

ale wyskakuje mi błąd:

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

Dziękuję Ci.

nolyugo
źródło
4
Ile razy to robisz? Jeśli tylko raz, prawie zawsze najlepiej jest użyć programu Excel do wyeksportowania do bardziej otwartego formatu, takiego jak .csv.
Ari B. Friedman
gsk3: Tak, lub Dokumenty Google, które od 2009 roku obsługują importowanie do programu Excel 2007: google.com/support/forum/p/Google%20Docs/ ... (Mam nadzieję, że już teraz działa dobrze.)
Benjamin Atkin
6
Jaka to wersja R? Jaki system operacyjny? Jaka wersja read.xlsx? Czy przeczytałeś przewodnik po publikowaniu? </ripleybot>
Spacedman,
2
Czy możesz wyjaśnić, czym różni się to pytanie od stackoverflow.com/questions/6099243/ ...
Chase
9
Sprawdziłeś, że R faktycznie jest w stanie znaleźć plik, np. file.exists("C:/AB_DNA_Tag_Numbers.xlsx")?
Ben Bolker,

Odpowiedzi:

104

W przypadku rozwiązania, które jest wolne od skomplikowanych zależności zewnętrznych *, jest teraz readxl:

Pakiet readxl ułatwia pobieranie danych z Excela do R. W porównaniu z wieloma istniejącymi pakietami (np. Gdata, xlsx, xlsReadWrite) readxl nie ma żadnych zewnętrznych zależności, więc jest łatwy w instalacji i obsłudze we wszystkich systemach operacyjnych. Jest przeznaczony do pracy z danymi tabelarycznymi przechowywanymi w jednym arkuszu.

Readxl obsługuje zarówno starszy format .xls, jak i nowoczesny format .xlsx oparty na XML. Obsługa .xls jest możliwa dzięki bibliotece libxls C, która usuwa wiele zawiłości bazowego formatu binarnego. Aby przeanalizować .xlsx, używamy biblioteki RapidXML C ++.

Można go zainstalować w następujący sposób:

install.packages("readxl") # CRAN version

lub

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

Stosowanie

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")

* nie do końca prawda, wymaga Rcpppakietu , który z kolei wymaga Rtools (dla Windows) lub Xcode (dla OSX), które są zależnościami zewnętrznymi w stosunku do R. Ale nie wymagają żadnego majstrowania przy ścieżkach itp., więc jest to przewaga nad zależnościami Java i Perl.

Aktualizacja Jest teraz pakiet rexcel . Obiecuje to, że formatowanie, funkcje i wiele innych informacji programu Excel z pliku Excel i do R.

Ben
źródło
35

Możesz także wypróbować pakiet XLConnect. Miałem z nim więcej szczęścia niż xlsx (plus potrafi czytać też pliki .xls).

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

również, jeśli masz problem z nie znalezieniem pliku, spróbuj wybrać go za pomocą file.choose ().

Ian Fellows
źródło
7
Zamiast tego readWorksheet(loadWorkbook(...))możesz zrobić to samo trochę bardziej zwięźle readWorksheetFromFile(...).
Hugh
To zadziałało na jednym z moich kłopotliwych arkuszy, w którym plik read.xlsx uległ awarii z „java.lang.IllegalArgumentException: indeks komórki musi wynosić> = 0”
ski_squaw
23

Zdecydowanie wypróbowałbym read.xlsfunkcję w gdatapakiecie, który jest znacznie bardziej dojrzały niż xlsxpakiet. Może wymagać Perla ...

Ben Bolker
źródło
21

Aktualizacja

Ponieważ odpowiedź poniżej jest teraz nieco nieaktualna, po prostu zwróciłbym uwagę na pakiet readxl . Jeśli arkusz Excela jest dobrze sformatowany / ułożony, użyłbym teraz readxl do czytania ze skoroszytu. Jeśli arkusze są źle sformatowane / leżą, nadal wyeksportuję je do CSV, a następnie rozwiążę problemy w R za pośrednictwem read.csv()lub zwykłego starego readLines().

Oryginał

Moim preferowanym sposobem jest zapisywanie pojedynczych arkuszy Excela w plikach rozdzielanych przecinkami (CSV). W systemie Windows pliki te są skojarzone z programem Excel, więc nie tracisz funkcji „otwieranie” dwukrotnym kliknięciem w programie Excel.

Pliki CSV można wczytać do języka R za pomocą read.csv()lub, jeśli jesteś w lokalizacji lub korzystasz z komputera skonfigurowanego z niektórymi ustawieniami europejskimi (gdzie ,jest używany jako miejsce dziesiętne), używającread.csv2() .

Te funkcje mają rozsądne wartości domyślne, które ułatwiają odczytywanie odpowiednio sformatowanych plików. Po prostu zachowaj etykiety próbek lub zmiennych w pierwszym wierszu lub kolumnie.

Dodatkowymi zaletami przechowywania plików w formacie CSV jest to, że ponieważ pliki są zwykłym tekstem, można je bardzo łatwo przekazywać i możesz mieć pewność, że otworzą się w dowolnym miejscu; nie potrzeba programu Excel do przeglądania lub edytowania danych.

Gavin Simpson
źródło
6
CSV nie pomogłoby, ponieważ skoroszyt zawiera kilka arkuszy, a każdy ma do 100 tys. Wierszy. Dzięki
nolyugo
7
Powiedziałem, że zapisuj poszczególne arkusze jako pliki CSV - ponieważ są to zwykły tekst, rozmiar arkuszy nie ma znaczenia. Jeśli nalegasz na pracę ze skoroszytami programu Excel, dostępne opcje odczytu danych do R staną się znacznie bardziej złożone - zobacz pakiety RODBC, RDCOM, aby uzyskać informacje alternatywne. Wreszcie, jeśli jesteś pewien, że postępowałeś zgodnie z instrukcjami użycia read.xlsx() i masz najnowsze wersje tego pakietu i R, wyślij e-mail do opiekuna pakietu, aby zgłosić potencjalny błąd.
Gavin Simpson
To naprawdę zależy od danych i poziomu współdziałania wymaganego między systemami operacyjnymi. Gdy tylko w twoich etykietach lub czynnikach pojawi się brak ascii ORAZ będziesz musiał pracować na Mac / Win / Lin, zaczną pojawiać się różne dziwności, jeśli będziesz eksportować / importować do iz programu Excel. Program Excel nie obsługuje z wdziękiem utf-8 (lub csv w tym przypadku). W takim przypadku albo zostaniesz w Excelu, albo przejdziesz do innej aplikacji arkusza kalkulacyjnego (ta ostatnia nie zawsze jest możliwa).
FvD
18

Przykład 2012:

library("xlsx")
FirstTable <- read.xlsx("MyExcelFile.xlsx", 1 , stringsAsFactors=F)
SecondTable <- read.xlsx("MyExcelFile.xlsx", 2 , stringsAsFactors=F)
  • Chciałbym wypróbować pakiet „xlsx”, ponieważ jest łatwy w obsłudze i wydaje się wystarczająco dojrzały
  • działało dobrze dla mnie i nie potrzebowałem żadnych dodatków, takich jak Perl lub cokolwiek innego

Przykład 2015:

library("readxl")
FirstTable  <- read_excel("MyExcelFile.xlsx", 1)
SecondTable <- read_excel("MyExcelFile.xlsx", 2)
  • obecnie używam readxl i mam z tym dobre doświadczenia.
  • nie potrzeba żadnych dodatkowych rzeczy
  • dobry występ
petermeissner
źródło
14

Ten nowy pakiet wygląda ładnie http://cran.r-project.org/web/packages/openxlsx/openxlsx.pdf Nie wymaga rJava i używa „Rcpp” dla zwiększenia szybkości.

RockScience
źródło
i jest w trakcie aktywnego rozwoju
RockScience,
1
Pracuję z dość dużymi skoroszytami programu Excel, a openxlxs jest chyba jedynym, który może obsługiwać tak duże pliki.
Jose R
Niestety wymaga "rtools"
Ferdi
@Ferdi. nie myśl tak! Wystarczy raz utworzyć pakiet. Nie do dalszego użytku.
RockScience,
5

Jeśli napotkasz ten sam problem i R daje Ci błąd - nie mogłem znaleźć funkcji ".jnew" - Wystarczy zainstalować bibliotekę rJava. Lub jeśli już ją masz, po prostu uruchom bibliotekę liniową (rJava). To powinien być problem.

Ponadto dla każdego powinno być jasne, że pliki csv i txt są łatwiejsze w obsłudze, ale życie nie jest łatwe i czasami wystarczy otworzyć plik xlsx.

Wilmer E Henao
źródło
1
kiedy załadować wersję 2.8.2 z gdatadostaję komunikat startowy gdata: read.xls support for 'XLSX' (Excel 2007+) files ENABLED.brzmi dla mnie jak powinno otworzyć pliki xlsx, choć co prawda nie testowałem go niedawno ...
Ben Bolker
1
Mogę potwierdzić, że gdatawersja 2.8.2 czyta xlsxpliki z read.xlsfunkcją.
Ben
4

Niedawno odkryłem funkcję Schaun Wheeler do importowania plików Excela do R po tym, jak zdałem sobie sprawę, że pakiet xlxs nie został zaktualizowany do wersji 3.1.0.

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

Nazwa pliku musi mieć rozszerzenie „.xlsx”, a plik nie może zostać otwarty po uruchomieniu funkcji.

Ta funkcja jest bardzo przydatna do uzyskiwania dostępu do prac innych ludzi. Głównymi zaletami w porównaniu z używaniem funkcji read.csv są kiedy

  • Importowanie wielu plików Excela
  • Importowanie dużych plików
  • Pliki, które są regularnie aktualizowane

Korzystanie z funkcji read.csv wymaga ręcznego otwierania i zapisywania każdego dokumentu Excela, co jest czasochłonne i bardzo nudne. Dlatego użycie funkcji Schauna do automatyzacji przepływu pracy jest ogromną pomocą.

Wielkie rekwizyty dla Schauna za to rozwiązanie.

Jonno Bourne
źródło
4

Dla mnie pakiet openxlx działał w najprostszy sposób.

install.packages("openxlsx")
library(openxlsx)
rawData<-read.xlsx("your.xlsx");
Henrik Bata
źródło
2

Jaki jest Twój system operacyjny? Jakiej wersji R używasz: 32-bitowej czy 64-bitowej? Jaką wersję oprogramowania Java masz zainstalowaną?

Miałem podobny błąd, kiedy po raz pierwszy zacząłem używać read.xlsx() funkcji i odkryłem, że mój problem (który może, ale nie musi być związany z Twoim; przynajmniej tę odpowiedź należy traktować jako „spróbuj też”) był związany z niekompatybilnością pakietu .xlsx z 64-bitową Javą. Jestem prawie pewien, że pakiet .xlsx wymaga 32-bitowej Javy.

Użyj 32-bitowego języka R i upewnij się, że jest zainstalowana 32-bitowa Java. Może to rozwiązać Twój problem.

user2755425
źródło
2

Sprawdziłeś, że R rzeczywiście jest w stanie znaleźć plik, np. File.exists ("C: /AB_DNA_Tag_Numbers.xlsx")? - Ben Bolker, 14 sierpnia 2011 o 23:05

Powyższy komentarz powinien rozwiązać Twój problem:

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

powinno działać dobrze po tym.

sprzeczność
źródło
1

Możesz zachować wiele kart i więcej informacji o formatowaniu, jeśli wyeksportujesz do pliku arkusza kalkulacyjnego OpenDocument ( ods ) lub starszego formatu Excela i zaimportujesz go za pomocą czytnika ODS lub czytnika Excel, o którym wspomniałeś powyżej.

Benjamin Atkin
źródło
1

Jak stwierdziło wielu tutaj, piszę to samo, ale z dodatkowym punktem!

Najpierw musimy się upewnić, że w naszym R Studio są zainstalowane te dwa pakiety:

  1. „readxl”
  2. „XLConnect”

W celu załadowania paczki w R możesz skorzystać z poniższej funkcji:

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

search wyświetli listę aktualnych pakietów dostępnych w R Studio.

Teraz kolejny haczyk, nawet jeśli możesz mieć te dwa pakiety, ale nadal możesz napotkać problem podczas odczytu pliku „xlsx”, a błąd może wyglądać tak: „błąd: więcej kolumn niż nazwa kolumny”

Aby rozwiązać ten problem, możesz po prostu ponownie zapisać arkusz programu Excel „xlsx” w formacie

„CSV (rozdzielany przecinkami)”

a twoje życie będzie super łatwe ....

Baw się dobrze!!

Rajeev Kumar Barnwal
źródło
1

Bardzo się starałem, aby odpowiedzieć na wszystkie powyższe odpowiedzi. Jednak tak naprawdę nie pomogli, ponieważ użyłem komputera Mac. Biblioteka rio ma tę funkcję importu, która może w zasadzie każdy rodzaj importowania pliku danych w Rstudio , nawet tych plików przy użyciu języków innych niż angielski!

Wypróbuj poniższe kody:

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

Mam nadzieję, że to pomoże. Bardziej szczegółowe informacje: https://cran.r-project.org/web/packages/rio/vignettes/rio.html

Suyang Xu
źródło