การนำเข้าไฟล์ Excel ไปยัง R, xlsx หรือ xls


92

โปรดมีใครช่วยฉันเกี่ยวกับวิธีที่ดีที่สุดในการนำเข้าไฟล์ excel 2007 (.xlsx) ไปยัง R ฉันได้ลองหลายวิธีแล้วและดูเหมือนจะไม่มีผล ฉันได้อัปเกรดเป็น 2.13.1, windows XP, xlsx 0.3.0 แล้วฉันไม่รู้ว่าทำไมข้อผิดพลาดยังคงเกิดขึ้น ฉันเหนื่อย:

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

หรือ

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

แต่ฉันได้รับข้อผิดพลาด:

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

ขอขอบคุณ.


4
คุณทำแบบนี้กี่ครั้ง? หากเพียงครั้งเดียวก็เกือบเสมอที่ดีที่สุดที่จะใช้ Excel .csvเพื่อการส่งออกในรูปแบบที่เปิดกว้างมากขึ้นเช่น
Ari B. Friedman

gsk3: ใช่หรือ Google เอกสารซึ่งรองรับการนำเข้า Excel 2007 มาตั้งแต่ปี '09: google.com/support/forum/p/Google%20Docs/… (หวังว่าตอนนี้มันจะทำงานได้ดี)
Benjamin Atkin

6
R รุ่นนี้คืออะไร? ระบบปฏิบัติการอะไร read.xlsx เวอร์ชันอะไร คุณอ่านคู่มือการโพสต์แล้วหรือยัง? </ripleybot>
Spacedman

2
ช่วยอธิบายได้ไหมว่าคำถามนี้แตกต่างจากstackoverflow.com/questions/6099243/…
Chase

9
คุณได้ตรวจสอบแล้วว่า R สามารถค้นหาไฟล์ได้จริงเช่นfile.exists("C:/AB_DNA_Tag_Numbers.xlsx")?
Ben Bolker

คำตอบ:


106

สำหรับโซลูชันที่ปราศจากการพึ่งพาภายนอกที่ยุ่งเหยิง * ตอนนี้มีreadxl:

แพ็คเกจ readxl ทำให้ง่ายต่อการดึงข้อมูลออกจาก Excel และเข้าสู่ R เมื่อเทียบกับแพ็คเกจที่มีอยู่ (เช่น gdata, xlsx, xlsReadWrite) readxl ไม่มีการอ้างอิงภายนอกดังนั้นจึงง่ายต่อการติดตั้งและใช้กับระบบปฏิบัติการทั้งหมด ได้รับการออกแบบมาเพื่อทำงานกับข้อมูลตารางที่จัดเก็บไว้ในแผ่นงานเดียว

Readxl รองรับทั้งรูปแบบ. xls ดั้งเดิมและรูปแบบ. xlsx ที่ทันสมัย การสนับสนุน. xls สามารถทำได้โดยใช้ไลบรารี libxls C ซึ่งแยกความซับซ้อนหลายอย่างของรูปแบบไบนารีพื้นฐานออกไป ในการแยกวิเคราะห์. xlsx เราใช้ไลบรารี RapidXML C ++

สามารถติดตั้งได้ดังนี้:

install.packages("readxl") # CRAN version

หรือ

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

การใช้งาน

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

* ไม่เป็นความจริงอย่างเคร่งครัดต้องใช้Rcppแพ็คเกจซึ่งจะต้องใช้ Rtools (สำหรับ Windows) หรือ Xcode (สำหรับ OSX) ซึ่งเป็นการอ้างอิงภายนอกของ R แต่พวกเขาไม่ต้องการการเล่นซอกับเส้นทาง ฯลฯ ดังนั้นจึงเป็น ข้อได้เปรียบเหนือการพึ่งพา Java และ Perl

อัปเดตขณะนี้มีแพ็คเกจrexcel สิ่งนี้สัญญาว่าจะได้รับการจัดรูปแบบ Excel ฟังก์ชันและข้อมูลประเภทอื่น ๆ จากไฟล์ Excel และเป็น R


35

คุณอาจต้องการลองใช้แพ็คเกจ XLConnect ฉันโชคดีกว่า xlsx (แถมยังอ่านไฟล์. xls ได้ด้วย)

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

นอกจากนี้หากคุณประสบปัญหาในการไม่พบไฟล์ของคุณให้ลองเลือกด้วย file.choose ()


7
มากกว่าreadWorksheet(loadWorkbook(...))ที่คุณสามารถทำสิ่งเล็ก ๆ น้อย ๆ readWorksheetFromFile(...)ที่เหมือนกันมากขึ้นด้วยชัดถ้อยชัดคำ
ฮิวจ์

สิ่งนี้ใช้ได้ผลกับหนึ่งในแผ่นงานที่มีปัญหาของฉันที่ read.xlsx ขัดข้องกับ "java.lang.IllegalArgumentException: ดัชนีเซลล์ต้อง> = 0"
ski_squaw

23

แน่นอนฉันจะลองread.xlsฟังก์ชั่นในgdataแพ็คเกจซึ่งถือว่าเป็นผู้ใหญ่กว่าxlsxแพ็คเกจมาก อาจต้องใช้ Perl ...


21

อัปเดต

เนื่องจากคำตอบด้านล่างนี้ค่อนข้างล้าสมัยฉันแค่ดึงความสนใจไปที่แพ็คเกจreadxl ถ้าแผ่นงาน Excel มีการจัดรูปแบบที่ดี / ทิ้งไว้ตอนนี้ฉันจะใช้readxlเพื่ออ่านจากสมุดงาน หากแผ่นมีรูปแบบไม่ดี / นอนออกมาแล้วก็ยังจะส่งออกไปยัง CSV และแล้วจัดการกับปัญหาใน R ทั้งผ่านหรือธรรมดาเก่าread.csv()readLines()

ต้นฉบับ

วิธีที่ฉันชอบคือบันทึกแผ่นงาน Excel แต่ละแผ่นในไฟล์ค่าที่คั่นด้วยเครื่องหมายจุลภาค (CSV) ใน Windows ไฟล์เหล่านี้จะเชื่อมโยงกับ Excel ดังนั้นคุณจะไม่หลุดฟีเจอร์ "ดับเบิลคลิก - เปิดใน Excel"

ไฟล์ CSV สามารถอ่านเป็น R ได้โดยใช้read.csv()หรือหากคุณอยู่ในตำแหน่งที่ตั้งหรือใช้คอมพิวเตอร์ที่ตั้งค่าการตั้งค่าแบบยุโรป (ที่,ใช้เป็นตำแหน่งทศนิยม) ให้ใช้read.csv2()ไฟล์.

ฟังก์ชันเหล่านี้มีค่าเริ่มต้นที่สมเหตุสมผลซึ่งทำให้การอ่านไฟล์ที่จัดรูปแบบอย่างเหมาะสมเป็นเรื่องง่าย เพียงเก็บป้ายกำกับสำหรับตัวอย่างหรือตัวแปรในแถวหรือคอลัมน์แรก

ประโยชน์เพิ่มเติมของการจัดเก็บไฟล์ใน CSV คือเนื่องจากไฟล์เป็นข้อความธรรมดาจึงสามารถส่งผ่านไปมาได้ง่ายมากและคุณมั่นใจได้ว่าจะเปิดได้ทุกที่ เราไม่จำเป็นต้องใช้ Excel ในการดูหรือแก้ไขข้อมูล


6
csv จะไม่ช่วยเนื่องจากสมุดงานมีหลายแผ่นงานและแต่ละแผ่นมีแถวไม่เกิน 100,000 แถว ขอบคุณ
nolyugo

7
ฉันบอกว่าบันทึกแผ่นงานแต่ละแผ่นเป็นไฟล์ CSV - เนื่องจากเป็นข้อความธรรมดาขนาดของแผ่นงานจึงไม่เกี่ยวข้อง หากคุณยืนยันที่จะทำงานกับเวิร์กบุ๊ก Excel ตัวเลือกที่มีอยู่สำหรับการอ่านข้อมูลใน R จะซับซ้อนมากขึ้น - ดูแพ็คเกจ RODBC, RDCOM สำหรับทางเลือกอื่น สุดท้ายหากคุณแน่ใจว่าคุณได้ปฏิบัติตามคำแนะนำในการใช้งานread.xlsx() และมีเวอร์ชันล่าสุดของแพ็กเกจนั้นและ R ให้ส่งอีเมลถึงผู้ดูแลแพ็กเกจเพื่อรายงานข้อบกพร่องที่อาจเกิดขึ้น
Gavin Simpson

ขึ้นอยู่กับข้อมูลและระดับความสามารถในการทำงานร่วมกันที่คุณต้องการระหว่างระบบปฏิบัติการ ทันทีที่มีป้ายกำกับหรือปัจจัยที่ไม่ใช่ ascii และคุณต้องทำงานกับ Mac / Win / Lin ความแปลกประหลาดต่างๆจะเริ่มเกิดขึ้นหากคุณส่งออก / นำเข้าและออกจาก excel Excel ไม่สามารถจัดการ utf-8 ได้อย่างสง่างาม (หรือ csv สำหรับเรื่องนั้น) ดังนั้นในกรณีนี้ไม่ว่าคุณจะอยู่ใน Excel หรือย้ายไปยังแอปพลิเคชันสเปรดชีตอื่น (ไม่สามารถทำได้ตลอดเวลา)
FvD

19

ตัวอย่างปี 2012:

library("xlsx")
FirstTable <- read.xlsx("MyExcelFile.xlsx", 1 , stringsAsFactors=F)
SecondTable <- read.xlsx("MyExcelFile.xlsx", 2 , stringsAsFactors=F)
  • ฉันจะลองแพ็คเกจ 'xlsx' เพราะมันง่ายต่อการจัดการและดูเป็นผู้ใหญ่พอ
  • ทำงานได้ดีสำหรับฉันและไม่ต้องการการเพิ่มเติมใด ๆ เช่น Perl หรืออะไรก็ตาม

ตัวอย่างปี 2015:

library("readxl")
FirstTable  <- read_excel("MyExcelFile.xlsx", 1)
SecondTable <- read_excel("MyExcelFile.xlsx", 2)
  • ปัจจุบันฉันใช้readxlและสร้างประสบการณ์ที่ดีกับมัน
  • ไม่จำเป็นต้องมีสิ่งของเพิ่มเติม
  • ประสิทธิภาพที่ดี

14

แพ็คเกจใหม่นี้ดูดีhttp://cran.r-project.org/web/packages/openxlsx/openxlsx.pdf ไม่ต้องใช้ rJava และใช้ 'Rcpp' เพื่อความเร็ว


และอยู่ระหว่างการพัฒนา
RockScience

1
ฉันกำลังทำงานกับสมุดงาน excel ที่ค่อนข้างใหญ่และ openxlxs เป็นเพียงเล่มเดียวที่สามารถจัดการไฟล์ขนาดใหญ่เช่นนี้ได้
Jose R

น่าเสียดายที่ต้องใช้ "rtools"
Ferdi

@ เฟอร์ดิ. อย่าคิดอย่างนั้น! เพียงแค่สร้างแพ็คเกจครั้งเดียว ไม่ใช่สำหรับการใช้งานต่อไป
RockScience

5

หากคุณพบปัญหาเดียวกันและ R ทำให้คุณเกิดข้อผิดพลาด - ไม่พบฟังก์ชัน ".jnew" - เพียงแค่ติดตั้งไลบรารี rJava หรือถ้าคุณมีอยู่แล้วให้เรียกใช้ไลบรารีบรรทัด (rJava) นั่นน่าจะเป็นปัญหา

นอกจากนี้ทุกคนควรชัดเจนว่าไฟล์ csv และ txt นั้นใช้งานได้ง่ายกว่า แต่ชีวิตไม่ใช่เรื่องง่ายและบางครั้งคุณก็ต้องเปิด xlsx


1
เมื่อฉันโหลดเวอร์ชัน 2.8.2 ของgdataฉันได้รับข้อความเริ่มต้นgdata: read.xls support for 'XLSX' (Excel 2007+) files ENABLED.ฟังดูเหมือนฉันควรเปิดไฟล์ xlsx แม้ว่าฉันจะไม่ได้ทดสอบเมื่อเร็ว ๆ นี้ ...
Ben Bolker

1
ฉันสามารถยืนยันได้ว่าgdataเวอร์ชัน 2.8.2 อ่านxlsxไฟล์ด้วยread.xlsฟังก์ชัน
เบ็น

4

ฉันเพิ่งค้นพบฟังก์ชันของ Schaun Wheeler สำหรับการนำเข้าไฟล์ excel ไปยัง R หลังจากที่ทราบว่าแพ็คเกจ xlxs ไม่ได้รับการอัปเดตสำหรับ R 3.1.0

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

ชื่อไฟล์ต้องมีนามสกุล ".xlsx" และไม่สามารถเปิดไฟล์ได้เมื่อคุณเรียกใช้ฟังก์ชัน

ฟังก์ชันนี้มีประโยชน์มากสำหรับการเข้าถึงงานของคนอื่น ๆ ข้อดีหลัก ๆ ของการใช้ฟังก์ชัน read.csv คือเมื่อ

  • การนำเข้าไฟล์ excel หลายไฟล์
  • การนำเข้าไฟล์ขนาดใหญ่
  • ไฟล์ที่อัปเดตเป็นประจำ

การใช้ฟังก์ชัน read.csv ต้องเปิดและบันทึกเอกสาร Excel แต่ละชุดด้วยตนเองซึ่งใช้เวลานานและน่าเบื่อมาก การใช้ฟังก์ชันของ Schaun เพื่อทำให้ขั้นตอนการทำงานเป็นไปโดยอัตโนมัติจึงเป็นความช่วยเหลือที่ยิ่งใหญ่

อุปกรณ์ประกอบฉากขนาดใหญ่สำหรับ Schaun สำหรับโซลูชันนี้



2

ระบบปฏิบัติการของคุณคืออะไร? คุณใช้ R เวอร์ชันใด: 32 บิตหรือ 64 บิต คุณติดตั้ง Java เวอร์ชันใด

ฉันมีข้อผิดพลาดคล้าย ๆ กันเมื่อฉันเริ่มใช้read.xlsx()ฟังก์ชันนี้เป็นครั้งแรกและพบว่าปัญหาของฉัน (ซึ่งอาจเกี่ยวข้องหรือไม่เกี่ยวข้องกับของคุณอย่างน้อยที่สุดคำตอบนี้ควรถูกมองว่า "ลองดูด้วย") เกี่ยวข้องกับความเข้ากันไม่ได้ ของ. xlsx pacakge พร้อม Java 64 บิต ฉันค่อนข้างมั่นใจว่าแพ็คเกจ. xlsx ต้องใช้ Java 32 บิต

ใช้ 32 บิต R และตรวจสอบให้แน่ใจว่าได้ติดตั้ง Java 32 บิตแล้ว ซึ่งอาจช่วยแก้ปัญหาของคุณได้


2

คุณตรวจสอบแล้วว่า R สามารถค้นหาไฟล์ได้จริงเช่น file.exists ("C: /AB_DNA_Tag_Numbers.xlsx")? - Ben Bolker 14 ส.ค. 54 เวลา 23:05 น

ความคิดเห็นข้างต้นน่าจะช่วยแก้ปัญหาของคุณได้:

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

ควรทำงานได้ดีหลังจากนั้น


1

คุณอาจสามารถเก็บแท็บหลายแท็บและข้อมูลการจัดรูปแบบเพิ่มเติมได้หากคุณส่งออกเป็นไฟล์ OpenDocument Spreadsheet ( ods ) หรือรูปแบบ Excel ที่เก่ากว่าและนำเข้าด้วยโปรแกรมอ่าน ODSหรือโปรแกรมอ่าน Excel ที่คุณกล่าวถึงข้างต้น


1

ตามที่หลายคนระบุไว้ที่นี่ฉันกำลังเขียนสิ่งเดียวกัน แต่มีประเด็นเพิ่มเติม!

ในตอนแรกเราต้องตรวจสอบให้แน่ใจว่า R Studio ของเราติดตั้งสองแพ็คเกจนี้แล้ว:

  1. "readxl"
  2. "XLConnect"

ในการโหลดแพ็คเกจใน R คุณสามารถใช้ฟังก์ชันด้านล่าง:

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

การค้นหาจะแสดงรายการแพ็คเกจปัจจุบันที่มีอยู่ใน R Studio ของคุณ

ตอนนี้สิ่งที่จับได้อีกแม้ว่าคุณอาจมีสองแพ็คเกจนี้ แต่คุณก็ยังอาจพบปัญหาขณะอ่านไฟล์ "xlsx" และข้อผิดพลาดอาจเป็น "ข้อผิดพลาด: คอลัมน์มากกว่าชื่อคอลัมน์"

ในการแก้ปัญหานี้คุณสามารถบันทึกแผ่นงาน excel "xlsx" ซ้ำได้ใน

"CSV (คั่นด้วยจุลภาค)"

แล้วชีวิตคุณจะง่ายสุด ๆ ....

มีความสุข!!


1

ฉันพยายามอย่างมากกับคำตอบทั้งหมดข้างต้น อย่างไรก็ตามพวกเขาไม่ได้ช่วยจริง ๆ เพราะฉันใช้ mac ห้องสมุด rioมีฟังก์ชั่นการนำเข้านี้ซึ่งโดยทั่วไปสามารถนำเข้าประเภทของแฟ้มข้อมูลใด ๆ ลงใน Rstudioแม้ไฟล์ผู้ที่ใช้ภาษาอื่นที่ไม่ใช่ภาษาอังกฤษ!

ลองใช้รหัสด้านล่าง:

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

หวังว่าจะช่วยได้ สำหรับข้อมูลอ้างอิงโดยละเอียดเพิ่มเติม: https://cran.r-project.org/web/packages/rio/vignettes/rio.html

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.