Đọc tệp Excel trực tiếp từ tập lệnh R


95

Làm cách nào để đọc tệp Excel trực tiếp vào R? Hay trước tiên tôi nên xuất dữ liệu sang tệp văn bản hoặc tệp CSV và nhập tệp đó vào R?


@Sacha Epskamp: với xlsReadWrite, bạn thậm chí không cần cài đặt Perl.
Joris Meys

1
gdataphiên bản 2.8.2 đọc xlsxcác tệp có read.xlschức năng
Ben

1
Xem cảnh báo của tôi (dưới dạng câu trả lời bên dưới) về khả năng mất độ chính xác nếu bạn xuất dữ liệu sang định dạng văn bản từ Excel.
russellpierce

1
xlsxgói cho xlsx / xlsm / xls, không biết về xlam, v.v.
Qbik

2
"Tôi không bao giờ thấy lý do gì để không xuất sang tệp văn bản trước". Còn điều này thì sao: Khi tôi xuất sang CSV, một trong những trường tôi cần sẽ không được ghi. Nó có vẻ giống như một số loại DRM nhưng vì tôi không viết bảng tính nên tôi không biết.
Nate Reed

Câu trả lời:


41

Đúng. Xem trang liên quan trên R wiki . Câu trả lời ngắn gọn: read.xlstừ gdatagói hoạt động hầu hết thời gian (mặc dù bạn cần phải cài đặt Perl trên hệ thống của mình - thường đã đúng trên MacOS và Linux, nhưng thực hiện thêm một bước trên Windows, tức là xem http://strawberryperl.com/ ). Có nhiều cảnh báo và các lựa chọn thay thế khác nhau, được liệt kê trên trang R wiki.

Lý do duy nhất tôi thấy không nên làm điều này trực tiếp là bạn có thể muốn kiểm tra bảng tính để xem nó có trục trặc hay không (tiêu đề kỳ lạ, nhiều trang tính [bạn chỉ có thể đọc một bảng một lần, mặc dù rõ ràng bạn có thể lặp lại tất cả] , các lô bao gồm, v.v.). Nhưng đối với một bảng tính hình chữ nhật, được định dạng tốt với số thuần túy và dữ liệu ký tự (tức là không phải số, ngày tháng, công thức được định dạng bằng dấu phẩy, có lỗi chia cho không, giá trị bị thiếu, v.v.), tôi thường không gặp vấn đề gì với quy trình này.


6
Có rất nhiều vấn đề tiềm ẩn cần xem xét mà cá nhân tôi gặp phải. Các trường có số có dấu phẩy cần được loại bỏ và chuyển thành số trong R. Các trường có "-" cần được mã hóa thành NA. Khuyến nghị chung là hãy thực sự xem xét các con số của bạn trong Excel và đảm bảo rằng chúng đang được dịch chính xác sang R.
Brandon Bertelsen

3
Không thể tranh luận với "bạn thực sự cần phải nhìn vào con số của bạn" ... vấn đề với các trường "-" là gì? không na.strings="-"giải quyết vấn đề? Có bao nhiêu vấn đề trong số này là chung chung và bao nhiêu trong số chúng (ví dụ: trường số có dấu phẩy) có thể được giải quyết bằng các công cụ khác như XLConnect ...?
Ben Bolker

1
Nhận xét đó được hướng đến OP, không phải tại bạn Ben, lỗi của tôi vì sắp xếp không tốt.
Brandon Bertelsen

1
Giai thoại liên quan: read.xlsthành công trong việc đọc một tờ rất lớn từ một file Excel ở đâu cả XLConnectxlsxthất bại (Tôi tin rằng vì cả hai đều dựa trên Apache POI )
Matt Parker

49

Hãy để tôi nhắc lại những gì @Chase khuyến nghị: Sử dụng XLConnect .

Theo tôi, lý do sử dụng XLConnect là:

  1. Nền tảng chéo. XLConnect được viết bằng Java và do đó, sẽ chạy trên Win, Linux, Mac mà không cần thay đổi mã R của bạn (ngoại trừ có thể là các chuỗi đường dẫn)
  2. Không có gì khác để tải. Chỉ cần cài đặt XLConnect và tiếp tục cuộc sống.
  3. Bạn chỉ đề cập đến việc đọc tệp Excel, nhưng XLConnect cũng sẽ ghi tệp Excel, bao gồm cả việc thay đổi định dạng ô. Và nó sẽ làm điều này từ Linux hoặc Mac, không chỉ Win.

XLConnect hơi mới so với các giải pháp khác nên nó ít được đề cập đến trong các bài đăng blog và tài liệu tham khảo. Đối với tôi, nó rất hữu ích.


48

Và 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 các gói hiện có (ví dụ: gdata, xlsx, xlsReadWrite, v.v.) readxl không có phụ thuộc bên ngoài nên 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 được xây dựng trên đầu 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.

Nó hỗ trợ cả định dạng .xls cũ và .xlsx

readxl có sẵn từ CRAN hoặc bạn có thể cài đặt nó từ github với:

# install.packages("devtools")
devtools::install_github("hadley/readxl")

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

Lưu ý rằng trong khi các mô tả nói: 'không có phụ thuộc bên ngoài', nó đòi hỏi các Rcppgói , do đó đòi hỏi Rtools (dành cho Windows) hoặc Xcode (cho OSX), mà phụ thuộc bên ngoài để R. Mặc dù nhiều người có họ cài đặt vì những lý do khác .


3
Nhanh hơn nhiều so với xlsx. Thời gian đọc giống như read.xlsx2, nhưng nó suy ra các loại.
Steve Rowe

1
@SteveRowe xem câu trả lời mới cho một số (cố gắng) tiêu chuẩn khách quan xác nhận việc này
MichaelChirico

Có cách nào để đọc chuỗi dưới dạng thừa số bằng cách sử dụng read_excelkhông? Tôi thích tốc độ so với read.xlsx, nhưng sau đó phải chuyển đổi thủ công các cột từ các ký tự thành các yếu tố làm hỏng mục đích.
coip

2
+1 vì thực tế là nó không có phụ thuộc. Tôi ghét phải cài đặt java. Và tôi đã thử nó và nó hoạt động rất tốt cho tôi.
Bastian

2
readxl và openxlsx là tốt nhất. readxl nhanh hơn nhưng nó không cho phép ghi. Dù sao, không ai trong số họ hoạt động tốt khi cố gắng chỉ định các lớp / kiểu cột.
skan

29

CHỈNH SỬA 2015-10: Như những người khác đã nhận xét ở đây openxlsx, readxlgói và nhanh hơn nhiều so với xlsxgói và thực sự quản lý để mở các tệp Excel lớn hơn (> 1500 hàng &> 120 cột). @MichaelChirico chứng tỏ điều đó readxltốt hơn khi tốc độ được ưu tiên và openxlsxthay thế chức năng được cung cấp bởi xlsxgói. Nếu bạn đang tìm kiếm một gói để đọc, ghi và sửa đổi các tệp Excel trong năm 2015, hãy chọn gói openxlsxthay thế xlsx.

Trước năm 2015: Tôi đã sử dụng xlsxgói . Nó đã thay đổi quy trình làm việc của tôi với Excel và R. Không còn các cửa sổ bật lên khó chịu hỏi nữa, liệu tôi có chắc chắn rằng tôi muốn lưu trang tính Excel của mình ở định dạng .txt hay không. Gói này cũng ghi các tệp Excel.

Tuy nhiên, tôi thấy read.xlsxchức năng chậm khi mở các tệp Excel lớn. read.xlsx2hàm nhanh hơn đáng kể, nhưng không đánh dấu lớp vectơ của cột data.frame. Bạn phải sử dụng colClasseslệnh để chỉ định các lớp cột mong muốn, nếu bạn sử dụng read.xlsx2hàm. Đây là một ví dụ thực tế:

read.xlsx("filename.xlsx", 1)đọc tệp của bạn và làm cho các lớp cột data.frame gần như hữu ích, nhưng rất chậm đối với các tập dữ liệu lớn. Cũng hoạt động cho .xlscác tệp.

read.xlsx2("filename.xlsx", 1)nhanh hơn, nhưng bạn sẽ phải xác định các lớp cột theo cách thủ công. Một phím tắt là chạy lệnh hai lần (xem ví dụ bên dưới). characterđặc điểm kỹ thuật chuyển đổi các cột của bạn thành các yếu tố. Sử dụng DatePOSIXctcác tùy chọn cho thời gian.

coln <- function(x){y <- rbind(seq(1,ncol(x))); colnames(y) <- colnames(x)
rownames(y) <- "col.number"; return(y)} # A function to see column numbers

data <- read.xlsx2("filename.xlsx", 1) # Open the file 

coln(data)    # Check the column numbers you want to have as factors

x <- 3 # Say you want columns 1-3 as factors, the rest numeric

data <- read.xlsx2("filename.xlsx", 1, colClasses= c(rep("character", x),
rep("numeric", ncol(data)-x+1)))

25

Với sự gia tăng của nhiều cách khác nhau để đọc tệp Excel Rvà vô số câu trả lời ở đây, tôi nghĩ tôi sẽ cố gắng làm sáng tỏ xem tùy chọn nào được đề cập ở đây hoạt động tốt nhất (trong một vài tình huống đơn giản).

Bản thân tôi đã sử dụng xlsxkể từ khi bắt đầu sử dụng R, vì quán tính nếu không có gì khác và gần đây tôi nhận thấy dường như không có bất kỳ thông tin khách quan nào về gói nào hoạt động tốt hơn.

Bất kỳ bài tập đo điểm chuẩn nào cũng chứa đầy khó khăn vì một số gói chắc chắn sẽ xử lý một số tình huống tốt hơn những gói khác và một loạt các cảnh báo khác.

Điều đó nói rằng, tôi đang sử dụng tập dữ liệu (có thể tái tạo) mà tôi nghĩ là ở định dạng khá phổ biến (8 trường chuỗi, 3 số, 1 số nguyên, 3 ngày):

set.seed(51423)
data.frame(
  str1 = sample(sprintf("%010d", 1:NN)), #ID field 1
  str2 = sample(sprintf("%09d", 1:NN)),  #ID field 2
  #varying length string field--think names/addresses, etc.
  str3 = 
    replicate(NN, paste0(sample(LETTERS, sample(10:30, 1L), TRUE),
                         collapse = "")),
  #factor-like string field with 50 "levels"
  str4 = sprintf("%05d", sample(sample(1e5, 50L), NN, TRUE)),
  #factor-like string field with 17 levels, varying length
  str5 = 
    sample(replicate(17L, paste0(sample(LETTERS, sample(15:25, 1L), TRUE),
                                 collapse = "")), NN, TRUE),
  #lognormally distributed numeric
  num1 = round(exp(rnorm(NN, mean = 6.5, sd = 1.5)), 2L),
  #3 binary strings
  str6 = sample(c("Y","N"), NN, TRUE),
  str7 = sample(c("M","F"), NN, TRUE),
  str8 = sample(c("B","W"), NN, TRUE),
  #right-skewed integer
  int1 = ceiling(rexp(NN)),
  #dates by month
  dat1 = 
    sample(seq(from = as.Date("2005-12-31"), 
               to = as.Date("2015-12-31"), by = "month"),
           NN, TRUE),
  dat2 = 
    sample(seq(from = as.Date("2005-12-31"), 
               to = as.Date("2015-12-31"), by = "month"),
           NN, TRUE),
  num2 = round(exp(rnorm(NN, mean = 6, sd = 1.5)), 2L),
  #date by day
  dat3 = 
    sample(seq(from = as.Date("2015-06-01"), 
               to = as.Date("2015-07-15"), by = "day"),
           NN, TRUE),
  #lognormal numeric that can be positive or negative
  num3 = 
    (-1) ^ sample(2, NN, TRUE) * round(exp(rnorm(NN, mean = 6, sd = 1.5)), 2L)
)

Sau đó tôi viết bài này cho csv và mở cửa vào LibreOffice và lưu nó như một tập tin .xlsx, sau đó làm chuẩn 4 của gói đề cập trong chủ đề này: xlsx, openxlsx, readxl, và gdata, bằng cách sử dụng tùy chọn mặc định (Tôi cũng đã thử một phiên bản hay không tôi chỉ định loại cột, nhưng điều này không thay đổi thứ hạng).

Tôi loại trừ RODBCvì tôi đang sử dụng Linux; XLConnectbởi vì có vẻ như mục đích chính của nó không phải là đọc trong các trang tính Excel đơn lẻ mà là nhập toàn bộ sổ làm việc Excel, vì vậy để đưa con ngựa của nó vào cuộc đua chỉ dựa vào khả năng đọc của nó có vẻ không công bằng; và xlsReadWritevì nó không còn tương thích với phiên bản của tôi R(dường như đã bị loại bỏ dần).

Sau đó, tôi chạy các điểm chuẩn với NN=1000LNN=25000L(đặt lại hạt giống trước mỗi khai báo data.frameở trên) để cho phép sự khác biệt đối với kích thước tệp Excel. gclà chủ yếu xlsx, mà tôi đã tìm thấy đôi khi có thể tạo ra tắc nghẽn bộ nhớ. Không cần quảng cáo thêm, đây là kết quả tôi tìm thấy:

Tệp Excel 1.000 hàng

benchmark1k <-
  microbenchmark(times = 100L,
                 xlsx = {xlsx::read.xlsx2(fl, sheetIndex=1); invisible(gc())},
                 openxlsx = {openxlsx::read.xlsx(fl); invisible(gc())},
                 readxl = {readxl::read_excel(fl); invisible(gc())},
                 gdata = {gdata::read.xls(fl); invisible(gc())})

# Unit: milliseconds
#      expr       min        lq      mean    median        uq       max neval
#      xlsx  194.1958  199.2662  214.1512  201.9063  212.7563  354.0327   100
#  openxlsx  142.2074  142.9028  151.9127  143.7239  148.0940  255.0124   100
#    readxl  122.0238  122.8448  132.4021  123.6964  130.2881  214.5138   100
#     gdata 2004.4745 2042.0732 2087.8724 2062.5259 2116.7795 2425.6345   100

Vì vậy, readxllà người chiến thắng, với openxlsxcạnh tranh và gdatamột kẻ thất bại rõ ràng. Tính từng số đo so với cột tối thiểu:

#       expr   min    lq  mean median    uq   max
# 1     xlsx  1.59  1.62  1.62   1.63  1.63  1.65
# 2 openxlsx  1.17  1.16  1.15   1.16  1.14  1.19
# 3   readxl  1.00  1.00  1.00   1.00  1.00  1.00
# 4    gdata 16.43 16.62 15.77  16.67 16.25 11.31

Chúng tôi thấy yêu thích của riêng tôi, xlsxchậm hơn 60% so với readxl.

Tệp Excel 25.000 hàng

Do tốn nhiều thời gian, tôi chỉ thực hiện 20 lần lặp lại trên tệp lớn hơn, nếu không các lệnh giống hệt nhau. Đây là dữ liệu thô:

# Unit: milliseconds
#      expr        min         lq       mean     median         uq        max neval
#      xlsx  4451.9553  4539.4599  4738.6366  4762.1768  4941.2331  5091.0057    20
#  openxlsx   962.1579   981.0613   988.5006   986.1091   992.6017  1040.4158    20
#    readxl   341.0006   344.8904   347.0779   346.4518   348.9273   360.1808    20
#     gdata 43860.4013 44375.6340 44848.7797 44991.2208 45251.4441 45652.0826    20

Đây là dữ liệu tương đối:

#       expr    min     lq   mean median     uq    max
# 1     xlsx  13.06  13.16  13.65  13.75  14.16  14.13
# 2 openxlsx   2.82   2.84   2.85   2.85   2.84   2.89
# 3   readxl   1.00   1.00   1.00   1.00   1.00   1.00
# 4    gdata 128.62 128.67 129.22 129.86 129.69 126.75

Vì vậy, readxllà người chiến thắng rõ ràng khi nói đến tốc độ. gdatatốt hơn hết là có thứ gì đó khác xử lý nó, vì nó rất chậm khi đọc tệp Excel và vấn đề này chỉ trầm trọng hơn đối với các bảng lớn hơn.

Hai điểm rút ra openxlsxlà 1) các phương pháp khác mở rộng của nó ( readxlđược thiết kế để chỉ làm một việc, đó có thể là một phần lý do tại sao nó nhanh như vậy), đặc biệt là write.xlsxchức năng của nó và 2) (nhiều nhược điểm hơn readxl) col_typesđối số readxlchỉ (như của văn bản này) chấp nhận một số không chuẩn R: "text"thay vì "character""date"thay vì "Date".


Sẽ thật tuyệt nếu bạn cũng thêm điểm chuẩn cho XLConnect. Cũng nhận xét rằng readxl nó không thể viết. xlsx và openxlsx không hoạt động bình thường với tùy chọn col_types hoặc colClasses.
skan

@skan Ban đầu tôi đã chạy một số thử nghiệm với XLConnectnhưng nó rất chậm; Tôi tin rằng readxlnhững hạn chế của tôi đã được trình bày đầy đủ trong đoạn cuối cùng của tôi; và tôi không có trải nghiệm nào tương tự như của bạn với xlsxhoặc openxlsxvì tôi thường xuyên sử dụng cả hai để chỉ định loại.
MichaelChirico


13
library(RODBC)
file.name <- "file.xls"
sheet.name <- "Sheet Name"

## Connect to Excel File Pull and Format Data
excel.connect <- odbcConnectExcel(file.name)
dat <- sqlFetch(excel.connect, sheet.name, na.strings=c("","-"))
odbcClose(excel.connect)

Cá nhân tôi thích RODBC và có thể giới thiệu nó.


7
Lưu ý: ODBC đôi khi có thể khó chạy trên các nền tảng khác ngoài Windows.
JD Dài

1
@JD Dài và thậm chí trên windows, đó là PITA. Không có thời gian sexy cho tôi và ODBC trên 64 bit W7 ...
La Mã Luštrik

4
Đang tải cần gói: RODBC Lỗi trong odbcConnectExcel (file.name): odbcConnectExcel là chỉ sử dụng được với Windows 32-bit
andrekos


6

Một giải pháp khác là xlsReadWritegói, không yêu cầu cài đặt bổ sung nhưng yêu cầu bạn tải xuống shlib bổ sung trước khi sử dụng lần đầu tiên bằng cách:

require(xlsReadWrite)
xls.getshlib()

Quên điều này có thể gây ra sự thất vọng hoàn toàn. Đã ở đó và tất cả ...

Ghi chú bên lề: Bạn có thể muốn xem xét chuyển đổi sang định dạng dựa trên văn bản (ví dụ: csv) và đọc từ đó. Điều này vì một số lý do:

  • bất kể giải pháp của bạn (RODBC, gdata, xlsReadWrite), một số điều kỳ lạ có thể xảy ra khi dữ liệu của bạn được chuyển đổi. Đặc biệt là ngày có thể khá rườm rà. Các HFWutilsgói có một số công cụ để đối phó với ngày EXCEL (mỗi bình luận @Ben Bolker của).

  • nếu bạn có trang tính lớn, đọc trong tệp văn bản sẽ nhanh hơn đọc từ EXCEL.

  • đối với tệp .xls và .xlsx, có thể cần các giải pháp khác nhau. EG gói xlsReadWrite hiện không hỗ trợ .xlsx AFAIK. gdatayêu cầu bạn cài đặt thêm thư viện perl để hỗ trợ .xlsx. xlsxgói có thể xử lý các phần mở rộng cùng tên.


@Ben Thx cho mẹo, tôi sẽ đưa nó vào câu trả lời của mình. Mặc dù vậy, tôi đã không cố gắng hoàn thành, vì trang wiki liên kết đến câu trả lời được chấp nhận đã khá hoàn chỉnh. Nhưng nó không đề cập đến gói HFWutils.
Joris Meys

1
-1; Hãy xem câu trả lời của tôi. TL: DR: Excel không lưu tập dữ liệu chính xác đầy đủ vào csv (hoặc khay nhớ tạm). Chỉ các giá trị hiển thị được giữ lại.
russellpierce

5

Như đã lưu ý ở trên trong nhiều câu trả lời khác, có rất nhiều gói tốt kết nối với tệp XLS / X và lấy dữ liệu một cách hợp lý. Tuy nhiên, bạn nên được cảnh báo rằng trong mọi trường hợp, bạn không nên sử dụng tệp clipboard (hoặc tệp .csv) để truy xuất dữ liệu từ Excel. Để biết lý do tại sao, hãy nhập =1/3vào một ô trong excel. Bây giờ, hãy giảm số dấu thập phân hiển thị cho bạn xuống còn hai. Sau đó sao chép và dán dữ liệu vào R. Bây giờ hãy lưu CSV. Bạn sẽ nhận thấy trong cả hai trường hợp, Excel chỉ giữ lại dữ liệu hiển thị cho bạn qua giao diện một cách hữu ích và bạn đã mất tất cả độ chính xác trong dữ liệu nguồn thực tế của mình.


1
Tôi muốn biết ai đã nghĩ rằng sự chung thủy bằng số không liên quan / quan trọng.
russellpierce

1
Cảnh báo tốt. Tuy nhiên nó phụ thuộc vào gói bạn sử dụng. một số không rơi vào bẫy này.
RockScience

@RocketScience Đây là lựa chọn thiết kế cơ bản trong xuất CSV bằng Excel. Bạn có ví dụ về một gói sử dụng khay nhớ tạm không gặp sự cố này không? Các gói phân tích cú pháp trực tiếp tệp xls xlsx sẽ dễ dàng không rơi vào bẫy này. Vì vậy, phạm vi cụ thể của cảnh báo của tôi.
russellpierce

trên Unix, bạn có thể thử gnumeric::read.gnumeric.sheet. Trên Windows Tôi không chắc chắn 100% nhưng tôi nghĩ gdata::read.xlscũng nên làm việc tốt (cần phải cài đặt perl dù)
RockScience

@RockScience Trân trọng, gdata :: read.xls không hoạt động trên dữ liệu khay nhớ tạm (trừ khi bạn làm theo cách của mình) và gnumeric không phải là Excel. Vì vậy, không có bằng chứng bất thường, cảnh báo của tôi có hiệu lực. Có rất nhiều tùy chọn tốt khác để trả lời cho câu hỏi này - hãy hy vọng rằng mọi người sử dụng những tùy chọn đó thay thế.
russellpierce 23/12/16

5

Mở rộng câu trả lời do @Mikko cung cấp, bạn có thể sử dụng một mẹo nhỏ để tăng tốc độ mọi thứ mà không cần phải "biết trước" các lớp cột của mình. Chỉ cần sử dụng read.xlsxđể lấy một số lượng bản ghi hạn chế để xác định các lớp và sau đó theo dõi nó vớiread.xlsx2

Thí dụ

# just the first 50 rows should do...
df.temp <- read.xlsx("filename.xlsx", 1, startRow=1, endRow=50) 
df.real <- read.xlsx2("filename.xlsx", 1, 
                      colClasses=as.vector(sapply(df.temp, mode)))

1
Giải pháp của bạn trả về numericcho factorsvào máy tính của tôi. read.xlsxsử dụng charactertrong readColumnschức năng để chỉ định các yếu tố. Tôi chắc chắn có một cách thanh lịch hơn nhận được các yếu tố như nhân vật, nhưng đây là một phiên bản sửa đổi của chức năng của bạn mà công trình: df.real <- read.xlsx2("filename.xlsx", 1, colClasses=gsub("factor", "character", as.vector(sapply(df.temp, class)))).
Mikko

Điều này chỉ hoạt động trong phạm vi mà loại cột có thể được xác định đầy đủ bởi hàng đầu tiên. Thường thì một phân tích cú pháp nhiều hơn hàng đầu tiên để thực hiện quyết định đó. Câu trả lời có thể được cải thiện để giải quyết nhận xét của aaa90210 bằng cách đặt tên cho gói mà các hàm này xuất phát.
russellpierce 17/07/17

1

Một tệp Excel có thể được đọc trực tiếp thành R như sau:

my_data <- read.table(file = "xxxxxx.xls", sep = "\t", header=TRUE)

Đọc các tệp xls và xlxs bằng gói readxl

library("readxl")
my_data <- read_excel("xxxxx.xls")
my_data <- read_excel("xxxxx.xlsx")
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.