Excel dosyalarını R, xlsx veya xls'e içe aktarma


91

Lütfen biri bana excel 2007 (.xlsx) dosyasını R'ye aktarmanın en iyi yolu konusunda yardımcı olabilir. Birkaç yöntem denedim ve hiçbiri işe yaramıyor gibi görünüyor. 2.13.1, Windows XP, xlsx 0.3.0'a yükselttim, hatanın neden devam ettiğini bilmiyorum. Denedim:

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

VEYA

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

ama şu hatayı alıyorum:

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

Teşekkür ederim.


4
Bunu kaç defa yapıyorsun? Yalnızca bir kez olacaksa, Excel'i kullanarak daha açık bir biçime dışa aktarmak için neredeyse her zaman en iyisidir .csv.
Ari B. Friedman

gsk3: Evet veya '09'dan beri Excel 2007 içe aktarma desteği olan Google Dokümanlar: google.com/support/forum/p/Google%20Docs/… (Umarım şimdiye kadar iyi çalışıyor.)
Benjamin Atkin

6
Bu R'nin hangi sürümü? Hangi işletim sistemi? Read.xlsx'in hangi sürümü? Gönderme kılavuzunu okudunuz mu? </ripleybot>
Spacedman


9
R'nin gerçekten dosyayı bulabildiğini kontrol ettiniz, örneğin file.exists("C:/AB_DNA_Tag_Numbers.xlsx")?
Ben Bolker

Yanıtlar:


104

Zorlu harici bağımlılıklardan * arınmış bir çözüm için artık readxl:

Readxl paketi, Excel'den R'ye veri almayı kolaylaştırır. Mevcut paketlerin çoğuyla karşılaştırıldığında (örn. Gdata, xlsx, xlsReadWrite) readxl'in harici bağımlılıkları yoktur, bu nedenle tüm işletim sistemlerinde kurulumu ve kullanımı kolaydır. Tek bir sayfada depolanan tablo verileriyle çalışmak üzere tasarlanmıştır.

Readxl hem eski .xls biçimini hem de modern xml tabanlı .xlsx biçimini destekler. .xls desteği, temeldeki ikili biçimin birçok karmaşıklığını soyutlayan libxls C kitaplığı ile mümkün kılınmıştır. .Xlsx'i ayrıştırmak için RapidXML C ++ kitaplığını kullanıyoruz.

Şu şekilde kurulabilir:

install.packages("readxl") # CRAN version

veya

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

Kullanım

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

* tam olarak doğru değil, Rcpppaket gerektirir , bu da Rtools (Windows için) veya Xcode (OSX için) gerektirir, bunlar R'ye harici bağımlılıklardır, ancak bunlar yollarla vb. Java ve Perl bağımlılıklarına göre avantaj.

Güncelle Şimdi rexcel paketi var. Bu, Excel biçimlendirmesini, işlevlerini ve diğer birçok bilgiyi Excel dosyasından ve R'ye almayı vaat ediyor.


35

XLConnect paketini de denemek isteyebilirsiniz. Bununla xlsx'ten daha iyi şansım oldu (ayrıca .xls dosyalarını da okuyabilir).

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

ayrıca, dosyanızın bulunamamasıyla ilgili sorun yaşıyorsanız, dosyayı file.choose () ile seçmeyi deneyin.


7
Yerine readWorksheet(loadWorkbook(...))size biraz daha özlü ile aynı a yapabilir readWorksheetFromFile(...).
Hugh

Bu, read.xlsx'in "java.lang.IllegalArgumentException ile çöktüğü sorunlu sayfalarımdan birinde çalıştı: Hücre dizini> = 0" olmalıdır
ski_squaw

23

Paketten çok daha olgun olan paketteki read.xlsişlevi kesinlikle deneyeceğim . Perl gerektirebilir ...gdataxlsx


21

Güncelleme

Aşağıdaki cevap biraz eski olduğundan, sadece readxl paketine dikkat çekerim . Excel sayfası iyi biçimlendirilmişse / dizilmişse , şimdi çalışma kitabından okumak için readxl kullanırdım. Sayfalar kötü biçimlendirilmişse / dizilmişse, yine de CSV'ye dışa aktarır ve ardından R'deki sorunları ya yoluyla read.csv()ya da eski olarak hallederim readLines().

Orijinal

Tercih ettiğim yöntem, tek tek Excel sayfalarını virgülle ayrılmış değer (CSV) dosyalarında kaydetmektir. Windows'ta bu dosyalar Excel ile ilişkilidir, bu nedenle Excel'de çift tıklama "özelliğini" kaybetmezsiniz.

CSV dosyaları R kullanılarak read.csv()veya bir konumdaysanız veya bazı Avrupa ayarlarıyla ( ,ondalık basamak olarak kullanılır) ayarlanmış bir bilgisayar kullanıyorsanız read.csv2().

Bu işlevler, uygun şekilde biçimlendirilmiş dosyaları okumayı kolaylaştıran makul varsayılanlara sahiptir. İlk satır veya sütunda örnekler veya değişkenler için herhangi bir etiket bulundurmanız yeterlidir.

Dosyaları CSV'de depolamanın ek faydaları, dosyalar düz metin olduklarından çok kolay bir şekilde aktarılabilmeleri ve her yerde açılabileceklerinden emin olabilmenizdir; verilere bakmak veya düzenlemek için Excel'e gerek yoktur.


6
Çalışma kitabı birkaç çalışma sayfası içerdiğinden ve her birinin en fazla 100.000 satır içerdiğinden csv yardımcı olmaz. Teşekkürler
nolyugo

7
Tek tek sayfaları CSV dosyaları olarak kaydet dedim - bunlar düz metin olduğundan, çalışma sayfalarının boyutu önemli değil. Excel çalışma kitaplarıyla çalışmakta ısrar ediyorsanız, verileri R'ye okumak için mevcut seçenekler çok daha karmaşık hale gelir - alternatifler için RODBC, RDCOM paketlerine bakın. Son olarak, bu paketin ve R'nin kullanım talimatlarını izlediğinizden read.xlsx() ve en son sürümlerine sahip olduğunuzdan eminseniz, potansiyel bir hatayı bildirmek için paket sorumlusuna e-posta gönderin.
Gavin Simpson

Bu gerçekten verilere ve işletim sistemleri arasında ihtiyaç duyduğunuz birlikte çalışabilirlik düzeyine bağlıdır. Etiketlerinizde veya faktörlerde ascii olmayanlar olduğu anda VE Mac / Win / Lin üzerinde çalışmanız gerektiğinde, excel'e ihracat / ithalat yaptığınızda çeşitli tuhaflıklar ortaya çıkmaya başlayacaktır. Excel, utf-8'i (veya bu konuda csv'yi) düzgün bir şekilde işleyemez. Bu durumda, ya Excel'de kalırsınız ya da farklı bir elektronik tablo uygulamasına geçersiniz (ikincisi her zaman mümkün değildir).
FvD

18

Örnek 2012:

library("xlsx")
FirstTable <- read.xlsx("MyExcelFile.xlsx", 1 , stringsAsFactors=F)
SecondTable <- read.xlsx("MyExcelFile.xlsx", 2 , stringsAsFactors=F)
  • Kullanımı kolay ve yeterince olgun göründüğü için 'xlsx' paketini deneyeceğim
  • benim için iyi çalıştı ve Perl gibi herhangi bir ilaveye ihtiyaç duymadı.

Örnek 2015:

library("readxl")
FirstTable  <- read_excel("MyExcelFile.xlsx", 1)
SecondTable <- read_excel("MyExcelFile.xlsx", 2)
  • bugünlerde kullanıyorum readxlve onunla iyi bir deneyim yaşadım.
  • fazladan bir şeye gerek yok
  • iyi performans

14

Bu yeni paket güzel görünüyor http://cran.r-project.org/web/packages/openxlsx/openxlsx.pdf rJava gerektirmiyor ve hız için 'Rcpp' kullanıyor.


ve aktif geliştirme altında
RockScience

1
Oldukça büyük bazı excel çalışma kitaplarıyla çalışıyorum ve openxlxs bu kadar büyük dosyaları işleyebilen tek kitap.
Jose R

Maalesef "rtools" gerektiriyor
Ferdi

@ Ferdi. öyle düşünme! Sadece paketi bir kez oluşturmak için. Daha fazla kullanım için değil.
RockScience

5

Aynı problemle karşılaşıyorsanız ve R size bir hata veriyorsa - ".jnew" işlevini bulamıyorsanız - Sadece rJava kitaplığını kurun. Veya zaten varsa, sadece hat kitaplığını (rJava) çalıştırın. Sorun bu olmalı.

Ayrıca, csv ve txt dosyalarıyla çalışmanın daha kolay olduğu herkes için açık olmalıdır, ancak hayat kolay değildir ve bazen sadece bir xlsx açmanız gerekir.


1
I sürüm 2.8.2 yüklediğinizde gdataben başlangıç mesajı almak gdata: read.xls support for 'XLSX' (Excel 2007+) files ENABLED.o dosyaları xlsx açılmalıdır gibi kuşkusuz Geçenlerde test etmedim rağmen ... bana Sesleri
Ben Bolker

1
gdata2.8.2 sürümünün xlsxbu read.xlsişlevi içeren dosyaları okuduğunu doğrulayabilirim .
Ben

4

Yakın zamanda, xlxs paketinin R 3.1.0 için güncellenmediğini fark ettikten sonra Schaun Wheeler'ın excel dosyalarını R'ye aktarma işlevini keşfettim.

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

Dosya adının ".xlsx" uzantısına sahip olması gerekir ve işlevi çalıştırdığınızda dosya açılamaz.

Bu işlev, diğer insanların çalışmalarına erişmek için gerçekten yararlıdır. Read.csv işlevini kullanmanın ana avantajları,

  • Birden çok excel dosyasını içe aktarma
  • Büyük dosyaları içe aktarma
  • Düzenli olarak güncellenen dosyalar

Read.csv işlevini kullanmak, her Excel belgesinin manuel olarak açılmasını ve kaydedilmesini gerektirir, bu da zaman alıcı ve çok sıkıcıdır. İş akışını otomatikleştirmek için Schaun'un işlevini kullanmak bu nedenle çok büyük bir yardımdır.

Bu çözüm için Schaun'a büyük destek.


4

Benim için openxlx paketi en kolay şekilde çalıştı.

install.packages("openxlsx")
library(openxlsx)
rawData<-read.xlsx("your.xlsx");

2

İşletim sisteminiz nedir? Hangi R sürümünü çalıştırıyorsunuz: 32 bit mi yoksa 64 bit mi? Java'nın hangi sürümünü yüklediniz?

read.xlsx()İşlevi ilk kullanmaya başladığımda benzer bir hatayla karşılaştım ve sorunumun (sizinkiyle ilgili olabilir veya olmayabilir; en azından bu yanıt "bunu da deneyin" olarak görülmelidir) uyumsuzlukla ilişkili olduğunu keşfettim 64 bit Java ile .xlsx paketi. .Xlsx paketinin 32 bit Java gerektirdiğinden oldukça eminim.

32 bit R kullanın ve 32 bit Java'nın kurulu olduğundan emin olun. Bu, sorununuzu çözebilir.


2

R'nin dosyayı gerçekten bulabildiğini kontrol ettiniz, örneğin file.exists ("C: /AB_DNA_Tag_Numbers.xlsx")? Ben Bolker 14 Ağustos 23: 05'te

Yukarıdaki yorum sorununuzu çözmüş olmalı:

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

bundan sonra iyi çalışmalı.


1

Bir OpenDocument Elektronik Tablo dosyasına ( ods ) veya daha eski bir Excel formatına dışa aktarırsanız ve bunu yukarıda bahsettiğiniz ODS okuyucu veya Excel okuyucu ile içe aktarırsanız, birden çok sekmeyi ve daha fazla biçimlendirme bilgisini tutabilirsiniz .


1

Buradaki birçok kişi tarafından belirtildiği gibi, aynı şeyi ama ek bir noktayla yazıyorum!

İlk önce R Studio'muzda şu iki paketin kurulu olduğundan emin olmalıyız:

  1. "readxl"
  2. "XLConnect"

Bir paketi R'ye yüklemek için aşağıdaki işlevi kullanabilirsiniz:

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

search, R Studio'nuzda bulunan mevcut paketlerin listesini görüntüleyecektir.

Şimdi başka bir yakalama, bu iki pakete sahip olmanıza rağmen, "xlsx" dosyasını okurken yine de sorunla karşılaşabilirsiniz ve hata "hata: sütun adından daha fazla sütun" gibi olabilir.

Bu sorunu çözmek için "xlsx" excel sayfanızı şuraya yeniden kaydedebilirsiniz:

"CSV (Virgülle ayrılmış)"

ve hayatın çok kolay olacak ....

İyi eğlenceler!!


1

Yukarıdaki tüm cevapları çok denedim. Ancak, bir mac kullandığım için aslında yardımcı olmadılar. Rio kütüphanesi bu alma işlevi bulunmaktadır temelde Rstudio içine veri dosyası her türlü alabilirsiniz İngilizce dışındaki dilleri kullanan, hatta bu dosyayı!

Aşağıdaki kodları deneyin:

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

Umarım bu yardımcı olur. Daha ayrıntılı referans için: https://cran.r-project.org/web/packages/rio/vignettes/rio.html

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.