2011-11-18 16 views
7

Büyük bir Excel elektronik tablosunu birden çok çalışma sayfasıyla birlikte R uygulamasındaki .CSV dosyalarına dönüştürmenin en kolay yolu nedir?Excel e-tablosunu R ile mi?

XLConnect ve XLSX'i test ettiğimi ve Excel sayfalarının çökmesine neden olduğunu belirlediğimi unutmayın. Bu yüzden özellikle XLConnect veya XLSX paketini kullanmayan bir çözüm arıyorum.

+1

Neden sadece CSV'ye dönüştürmek için excel kullanmıyorsunuz? – Stedy

+5

@Stedy - Belki de Excel elektronik tablosu, AME'nin değiştiremeyeceği, ancak yine de çalışması gereken otomatik bir periyodik sürecin parçası olarak üretilir. Alternatif olarak, belki de AME'nin 5000 gibi Excel sayfalarına sahip olması ve her birinin birden çok sayfa alması gerekiyor, ancak dosyalara nasıl bağlanacağını zaten biliyor. Manuel dönüşümün kâbus olduğu bir çok senaryoyu düşünebilirim. –

+0

@MattParker - good point – Stedy

cevap

5

http://rwiki.sciviews.org/doku.php?id=tips:data-io:ms_windows

DÜZENLEME: Eğer Perl çalıştıran varsa

, sen GVeri güncel bir sürümünü

require(gdata) 
installXLSXsupport() #now the example from help(read.xls) 
    # load the third worksheet, skipping the first two non-data lines... 
    if('XLSX' %in% xlsFormats()) # if XLSX is supported.. 
     data <- read.xls(exampleFile2007, sheet="Sheet with initial text", skip=2) 
data 
#----------------------- 
    X  X.1 D E. F G Factor 
1 NA FirstRow 1 NA NA NA Red 
2 NA SecondRow 2 1 NA NA Green 
3 NA ThirdRow 3 2 1 NA Red 
4 NA FourthRow 4 3 2 1 Black 
#------------------------ 
write.csv(data) 

Bu Mac'te yapıldığını ve ihtiyaç: read.xlsx seçeneği ele almak Bu soruna kadar her zaman bir hata aldığımdan beri installXLSXsupport() aşamasında tökezledim. Bu sefer bir Terminal komut satırından Perl'i başlattım ve kişisel konfigürasyonumu kurduktan sonra, CPAN aynalarımı kıtamda tanımladıktan sonra başarılı oldum ve perl çalıştırmayı bıraktım.

+0

Bu harika bir kaynak, ancak kullandığınız seçeneklere ve deneyimlerinize kişisel bir yorum eklemeniz durumunda cevabınızın daha da iyi olacağını düşünüyorum. Böyle bir listeye nereden başlayacağını bilmek zor. –

+0

Yorumunuzda belirtmiş olsanız bile, bu tür teklifler hakkında hiçbir ayrıntı bulunmadığından, soruların durumuna uygun bir yanıt vermek zor olurdu. Belirsiz bir soruyu cevaplamak için genel bir cevap verildi ve umarız ki ayrıntıların açıklığa kavuşturulması bekleniyordu. –

+0

Bağlantı DWIN için teşekkürler. Bu soru aslında XLConnect ve XLSX paketlerinde özellikle büyük bir .xlsx dosyasını okuyamayan bir sorunla ilgilidir. Elektronik tabloları el ile bir CSV dosyasına dönüştürürsem, R kodum gayet iyi çalışıyor. Bu nedenle, süreci otomatikleştirmek için büyük .xlsx dosyalarını okuyabilen ve bunları .csv dosyalarına dönüştürebilen bir R paketi kullanmam gerekiyor. Referansınızı okuduktan sonra, gdata'ya bir şans vereceğim. "Gdata" paketini kullanarak .xlsx dosyalarını nasıl dönüştürdüğümü anlamama yardımcı olabilir misiniz? – AME

9

İşte tüm sayfaları dışarı yazmak için bir döngü var: readxl paketine dayalı

require(gdata) 
## install support for xlsx files 
installXLSXsupport() 
excelFile <- ("/full/path/to/excelFile.xlsx") 
## note that the perl scripts that gdata uses do not cope well will tilde expansion 
## on *nix machines. So use the full path. 
numSheets <- sheetCount(excelFile, verbose=TRUE) 

for (i in 1:numSheets) { 
    mySheet <- read.xls(excelFile, sheet=i) 
    write.csv(mySheet, file=paste(i, "csv", sep="."), row.names=FALSE) 
} 
1

Güncelleme cevap.

library("readxl") 

#function to read all sheets of a workbook 
read_excel_allsheets <- function(filename) { 
    sheets <- readxl::excel_sheets(filename) 
    x <- lapply(sheets, function(X) readxl::read_excel(filename, sheet = X)) 
    names(x) <- sheets 
    x 
} 

sheetnames <- read_excel_allsheets("excelFile.xlsx") 
names(sheetnames) 
+0

Basit ve önerilir. 'read_excel (dosya)%>% data.table :: fwrite (fileout)' – Rob