Nhập tệp Excel vào R, xlsx hoặc xls


89

Xin ai đó có thể giúp tôi cách tốt nhất để nhập tệp excel 2007 (.xlsx) vào R. Tôi đã thử một số phương pháp nhưng dường như không có phương pháp nào hoạt động. Tôi đã nâng cấp lên 2.13.1, windows XP, xlsx 0.3.0, không hiểu sao lỗi cứ liên tục xuất hiện. Tôi đã thử:

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

HOẶC LÀ

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

nhưng tôi gặp lỗi:

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

Cảm ơn bạn.


4
Bạn đang làm điều này bao nhiêu lần? Nếu chỉ một lần, tốt nhất bạn nên sử dụng Excel để xuất sang định dạng mở hơn, chẳng hạn như .csv.
Ari B. Friedman,

gsk3: Có, hoặc Google Tài liệu, đã có hỗ trợ nhập Excel 2007 kể từ '09: google.com/support/forum/p/Google%20Docs/… (Hy vọng bây giờ nó hoạt động tốt.)
Benjamin Atkin

6
Phiên bản R là gì? Hệ điều hành nào? Phiên bản nào của read.xlsx? Bạn đã đọc hướng dẫn đăng bài chưa? </ripleybot>
Spacedman

2
Bạn có thể giải thích câu hỏi này khác với stackoverflow.com/questions/6099243/…
Chase

9
Bạn đã kiểm tra xem R có thực sự có thể tìm thấy tệp không, ví dụ file.exists("C:/AB_DNA_Tag_Numbers.xlsx")?
Ben Bolker

Câu trả lời:


101

Đối với một giải pháp không có phụ thuộc bên ngoài khó hiểu *, bây giờ có readxl:

Gói readxl giúp dễ dàng lấy dữ liệu ra khỏi Excel và sang R. So với nhiều gói hiện có (ví dụ: gdata, xlsx, xlsReadWrite) readxl không có phụ thuộc bên ngoài nên rất dễ cài đặt và sử dụng trên tất cả các hệ điều hành. Nó được thiết kế để làm việc với dữ liệu dạng bảng được lưu trữ trong một trang tính.

Readxl hỗ trợ cả định dạng .xls kế thừa và định dạng .xlsx dựa trên xml hiện đại. Hỗ trợ .xls có thể thực hiện được với thư viện libxls C, thư viện này loại bỏ nhiều phức tạp của định dạng nhị phân cơ bản. Để phân tích cú pháp .xlsx, chúng tôi sử dụng thư viện RapidXML C ++.

Nó có thể được cài đặt như vậy:

install.packages("readxl") # CRAN version

hoặc là

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

Sử dụng

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

* không hoàn toàn đúng, nó yêu cầu Rcppgói , do đó yêu cầu Rtools (cho Windows) hoặc Xcode (cho OSX), là các phần phụ thuộc bên ngoài R. Nhưng chúng không yêu cầu bất kỳ lần mò đường dẫn nào, v.v., vì vậy đó là lợi thế hơn các phụ thuộc Java và Perl.

Cập nhật Hiện có gói hủy bỏ . Điều này hứa hẹn nhận được định dạng Excel, các hàm và nhiều loại thông tin khác từ tệp Excel và sang R.


35

Bạn cũng có thể muốn thử gói XLConnect. Tôi đã gặp may mắn hơn với nó so với xlsx (cộng với nó cũng có thể đọc các tệp .xls).

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

Ngoài ra, nếu bạn gặp sự cố không tìm thấy tệp của mình, hãy thử chọn tệp đó bằng file.choose ().


7
Thay vì readWorksheet(loadWorkbook(...))bạn có thể làm điều tương tự ngắn gọn hơn một chút readWorksheetFromFile(...).
Hugh

Điều này đã hoạt động trên một trong những trang tính rắc rối của tôi mà read.xlsx gặp sự cố với "java.lang.IllegalArgumentException: Chỉ mục ô phải> = 0"
ski_squaw

23

Tôi chắc chắn sẽ thử read.xlschức năng trong gdatagói, nó trưởng thành hơn đáng kể so với xlsxgói. Nó có thể yêu cầu Perl ...


21

Cập nhật

Vì Câu trả lời bên dưới hiện đã hơi lỗi thời, tôi chỉ thu hút sự chú ý đến gói readxl . Nếu trang tính Excel được định dạng tốt / thoát ra thì bây giờ tôi sẽ sử dụng readxl để đọc từ sổ làm việc. Nếu các trang tính được định dạng kém / thiếu thì tôi vẫn sẽ xuất sang CSV và sau đó xử lý các sự cố trong R hoặc thông qua read.csv()hoặc cũ readLines().

Nguyên

Cách ưa thích của tôi là lưu các trang tính Excel riêng lẻ trong các tệp giá trị được phân tách bằng dấu phẩy (CSV). Trên Windows, các tệp này được liên kết với Excel để bạn không mất "tính năng" nhấp đúp-mở-trong Excel.

Các tệp CSV có thể được đọc thành R bằng cách sử dụng read.csv(), hoặc, nếu bạn đang ở một địa điểm hoặc sử dụng máy tính được thiết lập với một số cài đặt Châu Âu (trong đó ,được sử dụng làm chữ số thập phân), bằng cách sử dụng read.csv2().

Các hàm này có các giá trị mặc định hợp lý giúp việc đọc các tệp được định dạng thích hợp trở nên đơn giản. Chỉ cần giữ bất kỳ nhãn nào cho các mẫu hoặc biến trong hàng hoặc cột đầu tiên.

Các lợi ích bổ sung của việc lưu trữ tệp trong CSV là vì các tệp là văn bản thuần túy, chúng có thể được truyền đi rất dễ dàng và bạn có thể tự tin rằng chúng sẽ mở ở bất kỳ đâu; người ta không cần Excel để xem hoặc chỉnh sửa dữ liệu.


6
Csv sẽ không hữu ích vì sổ làm việc chứa nhiều trang tính và mỗi trang tính có tối đa 100 nghìn hàng. Cảm ơn
nolyugo

7
Tôi đã nói lưu các trang tính riêng lẻ dưới dạng tệp CSV - vì đây là văn bản thuần túy, kích thước của các trang tính không liên quan. Nếu bạn khăng khăng muốn làm việc với sổ làm việc Excel thì các tùy chọn có sẵn để đọc dữ liệu trong R trở nên phức tạp hơn nhiều - hãy xem các gói RODBC, RDCOM để biết các lựa chọn thay thế. Cuối cùng, nếu bạn chắc chắn rằng bạn đã làm theo hướng dẫn sử dụng read.xlsx() có phiên bản mới nhất của gói đó và R, thì hãy gửi email cho người bảo trì gói để báo cáo lỗi tiềm ẩn.
Gavin Simpson

Nó thực sự phụ thuộc vào dữ liệu và mức độ tương tác mà bạn yêu cầu giữa các hệ điều hành. Ngay khi không có ascii trong nhãn hoặc các yếu tố của bạn VÀ bạn cần làm việc trên Mac / Win / Lin, các loại kỳ lạ sẽ bắt đầu xảy ra nếu bạn xuất / nhập đến và từ excel. Excel không thể xử lý utf-8 một cách duyên dáng (hoặc csv cho vấn đề đó). Vì vậy, trong trường hợp đó, bạn ở lại Excel hoặc chuyển sang ứng dụng bảng tính khác (không phải lúc nào cũng có thể thực hiện được).
FvD

18

Ví dụ 2012:

library("xlsx")
FirstTable <- read.xlsx("MyExcelFile.xlsx", 1 , stringsAsFactors=F)
SecondTable <- read.xlsx("MyExcelFile.xlsx", 2 , stringsAsFactors=F)
  • Tôi sẽ thử gói 'xlsx' vì nó dễ xử lý và có vẻ đủ trưởng thành
  • hoạt động tốt cho tôi và không cần bất kỳ bổ sung nào như Perl hoặc bất cứ điều gì

Ví dụ 2015:

library("readxl")
FirstTable  <- read_excel("MyExcelFile.xlsx", 1)
SecondTable <- read_excel("MyExcelFile.xlsx", 2)
  • ngày nay tôi sử dụng readxlvà đã có kinh nghiệm tốt với nó.
  • không cần thêm thứ gì
  • hiệu suất tốt

14

Gói mới này có vẻ đẹp http://cran.r-project.org/web/packages/openxlsx/openxlsx.pdf Nó không yêu cầu rJava và đang sử dụng 'Rcpp' để tăng tốc độ.


và nó đang được phát triển tích cực
RockScience

1
Tôi đang làm việc với một số sổ làm việc excel khá lớn và openxlxs là loại duy nhất có thể xử lý các tệp lớn như vậy.
Jose R

Thật không may, nó yêu cầu "rtools"
Ferdi

@Ferdi. đừng nghĩ vậy! Chỉ để tạo gói một lần. Không sử dụng thêm.
RockScience

5

Nếu bạn đang gặp phải vấn đề tương tự và R đang báo lỗi cho bạn - không thể tìm thấy hàm ".jnew" - Chỉ cần cài đặt thư viện rJava. Hoặc nếu bạn đã có nó, chỉ cần chạy thư viện dòng (rJava). Đó nên là vấn đề.

Ngoài ra, cần phải hiểu rõ với mọi người rằng các tệp csv và txt dễ làm việc hơn, nhưng cuộc sống không dễ dàng và đôi khi bạn chỉ cần mở một xlsx.


1
khi tôi tải phiên bản 2.8.2 của gdatatôi nhận được thông báo khởi động gdata: read.xls support for 'XLSX' (Excel 2007+) files ENABLED.Âm thanh với tôi như nó nên mở xlsx file, mặc dù phải thừa nhận là tôi đã không kiểm tra thời gian gần đây ...
Bến Bolker

1
Tôi có thể xác nhận rằng gdataphiên bản 2.8.2 đọc xlsxcác tệp có read.xlschức năng này.
Ben

4

Gần đây tôi đã khám phá ra chức năng của Schaun Wheeler để nhập tệp excel vào R sau khi nhận ra rằng gói xlxs chưa được cập nhật cho R 3.1.0.

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

Tên tệp cần có phần mở rộng ".xlsx" và không thể mở tệp khi bạn chạy hàm.

Chức năng này thực sự hữu ích để truy cập công việc của những người khác. Những lợi thế chính so với việc sử dụng hàm read.csv là khi

  • Nhập nhiều tệp excel
  • Nhập các tệp lớn
  • Các tệp được cập nhật thường xuyên

Sử dụng hàm read.csv yêu cầu mở và lưu từng tài liệu Excel theo cách thủ công, tốn thời gian và rất nhàm chán. Do đó, sử dụng chức năng của Schaun để tự động hóa quy trình làm việc là một trợ giúp lớn.

Đạo cụ lớn cho Schaun cho giải pháp này.


4

Đối với tôi, gói openxlx hoạt động theo cách dễ dàng nhất.

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

2

Hệ điều hành của bạn là gì? Bạn đang chạy phiên bản R nào: 32-bit hay 64-bit? Bạn đã cài đặt phiên bản Java nào?

Tôi đã gặp lỗi tương tự khi lần đầu tiên bắt đầu sử dụng read.xlsx() chức năng và phát hiện ra rằng vấn đề của tôi (có thể liên quan đến hoặc không liên quan đến của bạn; tối thiểu, phản hồi này phải được xem là "hãy thử cái này") có liên quan đến tính không tương thích của .xlsx pacakge với Java 64-bit. Tôi khá chắc chắn rằng gói .xlsx yêu cầu Java 32-bit.

Sử dụng R 32-bit và đảm bảo rằng Java 32-bit đã được cài đặt. Điều này có thể giải quyết vấn đề của bạn.


2

Bạn đã kiểm tra xem R có thực sự có thể tìm thấy tệp hay không, ví dụ: file.exists ("C: /AB_DNA_Tag_Numbers.xlsx")? - Ben Bolker 14 tháng 8 '11 lúc 23:05

Bình luận trên chắc đã giải quyết được vấn đề của bạn:

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

sẽ hoạt động tốt sau đó.


1

Bạn có thể giữ nhiều tab và nhiều thông tin định dạng hơn nếu bạn xuất sang tệp Bảng tính OpenDocument ( ods ) hoặc định dạng Excel cũ hơn và nhập nó bằng trình đọc ODS hoặc trình đọc Excel mà bạn đã đề cập ở trên.


1

Như nhiều người đã nói ở đây, tôi đang viết điều tương tự nhưng với một điểm bổ sung!

Đầu tiên, chúng ta cần đảm bảo rằng R Studio của chúng ta đã cài đặt hai gói này:

  1. "readxl"
  2. "XLConnect"

Để tải một gói trong R, bạn có thể sử dụng chức năng dưới đây:

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

tìm kiếm sẽ hiển thị danh sách các gói hiện tại đang có trong R Studio của bạn.

Bây giờ một lỗi khác, mặc dù bạn có thể có hai gói này nhưng bạn vẫn có thể gặp sự cố khi đọc tệp "xlsx" và lỗi có thể giống như "lỗi: nhiều cột hơn tên cột"

Để giải quyết vấn đề này, bạn chỉ cần lưu lại trang tính excel "xlsx" của mình vào

"CSV (Phân cách bằng dấu phẩy)"

và cuộc sống của bạn sẽ trở nên siêu dễ dàng ....

Chúc vui vẻ!!


1

Tôi đã cố gắng rất nhiều cho tất cả các câu trả lời trên. Tuy nhiên, họ thực sự không giúp được gì vì tôi đã sử dụng máy Mac. Các thư viện rio có chức năng nhập khẩu này mà về cơ bản có thể nhập bất kỳ loại tập tin dữ liệu vào Rstudio , ngay cả những tập tin sử dụng ngôn ngữ khác ngoài tiếng Anh!

Hãy thử mã bên dưới:

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

Hy vọng điều này giúp đỡ. Để tham khảo chi tiết hơn: https://cran.r-project.org/web/packages/rio/vignettes/rio.html

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.