Mengimpor file Excel ke R, xlsx atau xls

91

Tolong bisakah seseorang membantu saya tentang cara terbaik untuk mengimpor file excel 2007 (.xlsx) ke R. Saya telah mencoba beberapa metode dan sepertinya tidak ada yang berhasil. Saya telah mengupgrade ke 2.13.1, windows XP, xlsx 0.3.0, saya tidak tahu mengapa kesalahan terus muncul. Saya mencoba:

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

ATAU

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

tapi saya mendapatkan kesalahan:

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

Terima kasih.

nolyugo
sumber
4
Berapa kali kamu melakukan ini? Jika hanya sekali, sebaiknya gunakan Excel untuk mengekspor ke format yang lebih terbuka, seperti .csv.
Ari B. Friedman
gsk3: Ya, atau Google Docs, yang telah memiliki dukungan impor Excel 2007 sejak '09: google.com/support/forum/p/Google%20Docs/… (Semoga saat ini berfungsi dengan baik.)
Benjamin Atkin
6
Versi apa dari R ini? Sistem operasi apa? Versi read.xlsx berapa? Sudahkah Anda membaca panduan posting? </ripleybot>
Spacedman
2
Bisakah Anda menjelaskan bagaimana pertanyaan ini berbeda dari stackoverflow.com/questions/6099243/…
Chase
9
Anda telah memeriksa bahwa R benar-benar dapat menemukan file tersebut, misalnya file.exists("C:/AB_DNA_Tag_Numbers.xlsx")?
Ben Bolker

Jawaban:

104

Untuk solusi yang bebas dari dependensi eksternal fiddly *, sekarang ada readxl:

Paket readxl memudahkan pengambilan data dari Excel dan ke R. Dibandingkan dengan banyak paket yang ada (mis. Gdata, xlsx, xlsReadWrite) readxl tidak memiliki dependensi eksternal sehingga mudah untuk diinstal dan digunakan di semua sistem operasi. Ini dirancang untuk bekerja dengan data tabel yang disimpan dalam satu lembar.

Readxl mendukung format .xls lama dan format .xlsx berbasis xml modern. Dukungan .xls dimungkinkan dengan library C libxls, yang mengabstraksi banyak kerumitan format biner yang mendasarinya. Untuk mengurai .xlsx, kami menggunakan pustaka RapidXML C ++.

Itu dapat diinstal seperti ini:

install.packages("readxl") # CRAN version

atau

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

Pemakaian

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

* tidak sepenuhnya benar, itu membutuhkan Rcpppaket , yang pada gilirannya membutuhkan Rtools (untuk Windows) atau Xcode (untuk OSX), yang merupakan dependensi di luar R. Tetapi mereka tidak memerlukan mengutak-atik jalur, dll., jadi itu adalah keuntungan atas ketergantungan Java dan Perl.

Perbarui Sekarang ada paket rexcel . Ini menjanjikan untuk mendapatkan pemformatan Excel, fungsi, dan banyak jenis informasi lainnya dari file Excel dan ke R.

Ben
sumber
35

Anda mungkin juga ingin mencoba paket XLConnect. Saya lebih beruntung darinya daripada xlsx (ditambah lagi bisa membaca file .xls juga).

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

juga, jika Anda mengalami masalah dengan file Anda tidak ditemukan, coba pilih dengan file.choose ().

Ian Fellows
sumber
7
Daripada readWorksheet(loadWorkbook(...))Anda dapat melakukan hal yang sama dengan lebih ringkas readWorksheetFromFile(...).
Hugh
Ini bekerja pada salah satu lembar bermasalah saya yang read.xlsx mogok dengan "java.lang.IllegalArgumentException: Indeks sel harus> = 0"
ski_squaw
23

Saya pasti akan mencoba read.xlsfungsi dalam gdatapaket, yang jauh lebih matang daripada xlsxpaket. Ini mungkin membutuhkan Perl ...

Ben Bolker
sumber
21

Memperbarui

Karena Jawaban di bawah sekarang agak ketinggalan jaman, saya hanya akan menarik perhatian ke paket readxl . Jika lembar Excel diformat / diletakkan dengan baik maka saya sekarang akan menggunakan readxl untuk membaca dari buku kerja. Jika lembaran diformat / diletakkan dengan buruk maka saya masih akan mengekspor ke CSV dan kemudian menangani masalah di R baik melalui read.csv()atau biasa readLines().

Asli

Cara yang saya sukai adalah menyimpan setiap lembar Excel dalam file nilai yang dipisahkan koma (CSV). Di Windows, file-file ini dikaitkan dengan Excel sehingga Anda tidak kehilangan "fitur" klik ganda-buka-di-Excel.

File CSV dapat dibaca menjadi R menggunakan read.csv(), atau, jika Anda berada di lokasi atau menggunakan komputer yang diatur dengan beberapa pengaturan Eropa ( ,yang digunakan sebagai tempat desimal), menggunakan read.csv2().

Fungsi ini memiliki default yang masuk akal yang membuat membaca file yang diformat dengan tepat menjadi sederhana. Simpan saja label untuk sampel atau variabel di baris atau kolom pertama.

Manfaat tambahan dari menyimpan file dalam CSV adalah karena file tersebut berupa teks biasa, file dapat diedarkan dengan sangat mudah dan Anda dapat yakin bahwa file akan terbuka di mana saja; orang tidak perlu Excel untuk melihat atau mengedit data.

Gavin Simpson
sumber
6
Csv tidak akan membantu karena buku kerja berisi beberapa lembar kerja dan masing-masing memiliki hingga 100 ribu baris. Terima kasih
nolyugo
7
Saya memang mengatakan simpan lembar individu sebagai file CSV - karena ini adalah teks biasa, ukuran lembar kerja tidak relevan. Jika Anda bersikeras bekerja dengan buku kerja Excel maka opsi yang tersedia untuk membaca data ke R menjadi jauh lebih kompleks - lihat paket RODBC, RDCOM untuk alternatif. Terakhir, jika Anda yakin telah mengikuti petunjuk penggunaan read.xlsx() dan memiliki versi terbaru dari paket tersebut dan R, kemudian kirim email ke pengelola paket untuk melaporkan potensi bug.
Gavin Simpson
Ini sangat tergantung pada data dan tingkat interoperabilitas yang Anda butuhkan di antara os. Segera setelah ada non-ascii di label atau faktor Anda DAN Anda perlu bekerja di Mac / Win / Lin, berbagai keanehan akan mulai terjadi jika Anda mengekspor / mengimpor ke dan dari excel. Excel tidak dapat menangani utf-8 dengan baik (atau csv dalam hal ini). Jadi dalam hal ini Anda tetap menggunakan Excel, atau pindah ke aplikasi spreadsheet yang berbeda (yang terakhir tidak selalu memungkinkan).
FvD
18

Contoh 2012:

library("xlsx")
FirstTable <- read.xlsx("MyExcelFile.xlsx", 1 , stringsAsFactors=F)
SecondTable <- read.xlsx("MyExcelFile.xlsx", 2 , stringsAsFactors=F)
  • Saya akan mencoba paket 'xlsx' karena mudah ditangani dan tampaknya cukup dewasa
  • bekerja dengan baik untuk saya dan tidak membutuhkan tambahan seperti Perl atau apapun

Contoh 2015:

library("readxl")
FirstTable  <- read_excel("MyExcelFile.xlsx", 1)
SecondTable <- read_excel("MyExcelFile.xlsx", 2)
  • saat ini saya menggunakan readxldan telah membuat pengalaman yang baik dengannya.
  • tidak perlu barang tambahan
  • Penampilan yang bagus
petermeissner
sumber
14

Paket baru ini terlihat bagus http://cran.r-project.org/web/packages/openxlsx/openxlsx.pdf Tidak memerlukan rJava dan menggunakan 'Rcpp' untuk kecepatan.

RockScience
sumber
dan sedang dalam pengembangan aktif
RockScience
1
Saya bekerja dengan beberapa workbook excel yang cukup besar, dan openxlxs adalah satu-satunya yang dapat menangani file sebesar itu.
Jose R
Sayangnya itu membutuhkan "rtools"
Ferdi
@Tokopedia tidak berpikir begitu! Hanya untuk membuat paket sekali. Bukan untuk penggunaan lebih lanjut.
RockScience
5

Jika Anda mengalami masalah yang sama dan R memberi Anda kesalahan - tidak dapat menemukan fungsi ".jnew" - Instal saja pustaka rJava. Atau jika Anda sudah memilikinya jalankan saja perpustakaan baris (rJava). Seharusnya itu masalahnya.

Juga, harus jelas bagi semua orang bahwa file csv dan txt lebih mudah untuk dikerjakan, tetapi hidup tidak mudah dan terkadang Anda hanya perlu membuka xlsx.

Wilmer E Henao
sumber
1
ketika saya memuat versi 2.8.2 dari gdatasaya mendapatkan pesan startup gdata: read.xls support for 'XLSX' (Excel 2007+) files ENABLED.Kedengarannya bagi saya seperti itu harus membuka file xlsx, meskipun memang saya belum mengujinya baru-baru ini ...
Ben Bolker
1
Saya dapat mengonfirmasi bahwa gdataversi 2.8.2 membaca xlsxfile dengan read.xlsfungsi tersebut.
Ben
4

Saya baru-baru ini menemukan fungsi Schaun Wheeler untuk mengimpor file excel ke R setelah menyadari bahwa paket xlxs belum diperbarui untuk R 3.1.0.

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

Nama file harus memiliki ekstensi ".xlsx" dan file tidak dapat dibuka saat Anda menjalankan fungsinya.

Fungsi ini sangat berguna untuk mengakses karya orang lain. Keuntungan utama dari penggunaan fungsi read.csv adalah when

  • Mengimpor banyak file excel
  • Mengimpor file besar
  • File yang diperbarui secara berkala

Menggunakan fungsi read.csv membutuhkan pembukaan dan penyimpanan manual setiap dokumen Excel yang memakan waktu dan sangat membosankan. Oleh karena itu, menggunakan fungsi Schaun untuk mengotomatiskan alur kerja merupakan bantuan yang sangat besar.

Alat peraga besar untuk Schaun untuk solusi ini.

Jonno Bourne
sumber
4

Bagi saya paket openxlx bekerja dengan cara termudah.

install.packages("openxlsx")
library(openxlsx)
rawData<-read.xlsx("your.xlsx");
Henrik Bata
sumber
2

Apa sistem operasi Anda? Versi R apa yang Anda jalankan: 32-bit atau 64-bit? Versi Java apa yang telah Anda instal?

Saya mengalami kesalahan serupa saat pertama kali mulai menggunakan read.xlsx()fungsi tersebut dan menemukan bahwa masalah saya (yang mungkin atau mungkin tidak terkait dengan masalah Anda; minimal, respons ini harus dilihat sebagai "coba ini juga") terkait dengan ketidaksesuaian dari .xlsx pacakge dengan 64-bit Java. Saya cukup yakin bahwa paket .xlsx membutuhkan Java 32-bit.

Gunakan R 32-bit dan pastikan Java 32-bit telah diinstal. Ini mungkin mengatasi masalah Anda.

pengguna2755425
sumber
2

Anda telah memeriksa bahwa R benar-benar dapat menemukan file tersebut, misalnya file.exists ("C: /AB_DNA_Tag_Numbers.xlsx")? - Ben Bolker 14 Agustus '11 pukul 23:05

Komentar di atas seharusnya menyelesaikan masalah Anda:

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

harus bekerja dengan baik setelah itu.

kontradiksi
sumber
1

Anda mungkin dapat menyimpan banyak tab dan lebih banyak informasi pemformatan jika Anda mengekspor ke file OpenDocument Spreadsheet ( ods ) atau format Excel yang lebih lama dan mengimpornya dengan pembaca ODS atau pembaca Excel yang Anda sebutkan di atas.

Benjamin Atkin
sumber
1

Seperti yang dinyatakan oleh banyak orang di sini, saya menulis hal yang sama tetapi dengan poin tambahan!

Pertama-tama kami perlu memastikan bahwa R Studio kami menginstal dua paket ini:

  1. "readxl"
  2. "XLConnect"

Untuk memuat paket di R Anda dapat menggunakan fungsi di bawah ini:

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

pencarian akan menampilkan daftar paket saat ini yang tersedia di R Studio Anda.

Sekarang tangkapan lain, meskipun Anda mungkin memiliki dua paket ini tetapi masih Anda mungkin mengalami masalah saat membaca file "xlsx" dan kesalahannya bisa seperti "error: lebih banyak kolom daripada nama kolom"

Untuk mengatasi masalah ini, Anda cukup menyimpan kembali lembar excel "xlsx" Anda ke

"CSV (Dibatasi koma)"

dan hidupmu akan sangat mudah ....

Selamat bersenang-senang!!

Rajeev Kumar Barnwal
sumber
1

Saya telah berusaha keras untuk semua jawaban di atas. Namun, mereka sebenarnya tidak membantu karena saya menggunakan mac. The perpustakaan rio memiliki fungsi impor ini yang pada dasarnya dapat mengimpor semua jenis file data ke dalam Rstudio , bahkan berkas yang menggunakan bahasa selain bahasa Inggris!

Coba kode di bawah ini:

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

Semoga bantuan ini. Untuk referensi lebih detail: https://cran.r-project.org/web/packages/rio/vignettes/rio.html

Suyang Xu
sumber