R, xlsx 또는 xls로 Excel 파일 가져 오기


91

누군가가 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 : 예, 또는 '09 년부터 엑셀 2007 가져 오기 지원을했다 Google 문서 도구 : google.com/support/forum/p/Google%20Docs/... (. 지금은 잘 작동에 의해 희망)
벤자민 Atkin

6
이것은 어떤 버전의 R입니까? 어떤 운영 체제? 어떤 버전의 read.xlsx? 게시 가이드를 읽었습니까? </ ripleybot>
Spacedman 2011 년


9
R이 실제로 파일을 찾을 수 있는지 확인했습니다. 예 : file.exists("C:/AB_DNA_Tag_Numbers.xlsx")?
Ben Bolker 2011-08-14

답변:


104

이상한 외부 종속성 *이없는 솔루션의 경우 다음이 있습니다 readxl.

readxl 패키지를 사용하면 Excel에서 R로 데이터를 쉽게 가져올 수 있습니다. 많은 기존 패키지 (예 : gdata, xlsx, xlsReadWrite)에 비해 readxl에는 외부 종속성이 없으므로 모든 운영 체제에서 쉽게 설치하고 사용할 수 있습니다. 단일 시트에 저장된 테이블 형식 데이터로 작동하도록 설계되었습니다.

Readxl은 레거시 .xls 형식과 최신 xml 기반 .xlsx 형식을 모두 지원합니다. .xls 지원은 with 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")

* 엄격히 사실이 아닙니다. Rtools (Windows 용) 또는 Xcode (OSX 용)가 필요한 Rcpp패키지 가 필요합니다 . 이는 R 외부의 종속성입니다. 그러나 경로 등을 조작 할 필요가 없습니다. Java 및 Perl 종속성보다 유리합니다.

업데이트 이제 rexcel 패키지가 있습니다. 이를 통해 Excel 파일에서 R로 Excel 서식, 기능 및 기타 여러 종류의 정보를 얻을 수 있습니다.


35

XLConnect 패키지를 사용해 볼 수도 있습니다. xlsx보다 운이 좋았습니다 (.xls 파일도 읽을 수 있음).

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

또한 파일을 찾을 수없는 경우 파일을 선택하십시오. file.choose ().


7
을 사용 readWorksheet(loadWorkbook(...))하여 조금 더 간결하게 동일한 작업을 수행 할 수 있습니다 readWorksheetFromFile(...).
Hugh

이 read.xlsx가와에 추락 나의 귀찮은 시트 중 하나 일 "java.lang.IllegalArgumentException가 셀 인덱스> = 0이어야합니다"
ski_squaw

23

나는 확실히 패키지 의 read.xls기능을 시도 할 것인데 gdata, 이는 xlsx패키지 보다 훨씬 더 성숙 합니다. Perl이 필요할 수 있습니다 ...


21

최신 정보

아래 답변은 이제 다소 구식이므로 readxl 패키지에 주의를 기울일 것 입니다. Excel 시트의 형식이 잘 지정되어 있거나 정리 되어 있으면 이제 readxl 을 사용 하여 통합 문서에서 읽습니다. 시트의 형식이 잘못 지정 read.csv()되거나 배치 된 경우 여전히 CSV로 내 보낸 다음 R에서 문제를 처리합니다 readLines().

실물

내가 선호하는 방법은 개별 Excel 시트를 쉼표로 구분 된 값 (CSV) 파일로 저장하는 것입니다. Windows에서 이러한 파일은 Excel과 연결되어 있으므로 두 번 클릭하여 Excel에서 열기 "기능"을 잃지 않습니다.

CSV 파일은를 사용하여 R로 읽을 수 있으며 read.csv(), 특정 위치에 있거나 일부 유럽 설정 ( ,소수점으로 사용되는 곳)으로 설정된 컴퓨터를 사용하는 경우 read.csv2().

이러한 함수에는 적절한 형식의 파일을 간단하게 읽을 수있는 합리적인 기본값이 있습니다. 첫 번째 행 또는 열에 샘플 또는 변수에 대한 레이블을 유지하십시오.

CSV로 파일을 저장하는 추가 이점은 파일이 일반 텍스트이므로 매우 쉽게 전달할 수 있고 어디서나 열 수 있다는 확신을 가질 수 있다는 것입니다. 데이터를 보거나 편집하기 위해 Excel이 필요하지 않습니다.


6
통합 문서에는 여러 워크 시트가 포함되어 있고 각 워크 시트에는 최대 100,000 개의 행이 있으므로 csv는 도움이되지 않습니다. 감사합니다
nolyugo

7
개별 시트를 CSV 파일로 저장한다고 말했었습니다. 일반 텍스트이므로 워크 시트의 크기는 무관합니다. Excel 통합 문서 작업을 고집하는 경우 R로 데이터를 읽는 데 사용할 수있는 옵션이 훨씬 더 복잡해집니다. 대안은 RODBC, RDCOM 패키지를 참조하세요. 당신은 당신이 사용에 대한 지침을 따랐다 어떤 경우 마지막으로, read.xlsx() 그리고 그 패키지와 R의 최신 버전을 가지고, 다음 잠재적 인 버그를보고하는 패키지 관리자에게 이메일을 보내.
Gavin Simpson

실제로 OS간에 필요한 데이터 및 상호 운용성 수준에 따라 다릅니다. 레이블 또는 요소에 비 ASCII가 있고 Mac / Win / Lin에서 작업해야하는 즉시 Excel로 /에서 내보내거나 가져 오면 여러 가지 이상 함이 발생하기 시작합니다. Excel은 utf-8을 정상적으로 처리 할 수 ​​없습니다 (또는 해당 문제에 대해서는 csv). 따라서이 경우 Excel에 남아 있거나 다른 스프레드 시트 응용 프로그램으로 이동합니다 (후자가 항상 가능한 것은 아닙니다).
FvD

18

예 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
나는 꽤 큰 엑셀 통합 문서로 작업하고 있으며, openxlxs는 그러한 큰 파일을 처리 할 수있는 유일한 문서입니다.
Jose R

불행히도 "rtools"가 필요합니다
Ferdi

@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 열립니다처럼 인정 하듯이 내가 최근에 테스트하지 않았습니다 있지만 ... 나에게 소리
벤 Bolker

1
gdata버전 2.8.2가 기능으로 xlsx파일을 읽는 것을 확인할 수 있습니다 read.xls.
Ben

4

저는 최근에 xlxs 패키지가 R 3.1.0 용으로 업데이트되지 않았다는 것을 깨달은 후 R로 엑셀 파일을 가져 오는 Schaun Wheeler의 기능을 발견했습니다.

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

파일 이름은 ".xlsx"확장자를 가져야하며 함수를 실행할 때 파일을 열 수 없습니다.

이 기능은 다른 사람들의 작업에 액세스하는 데 정말 유용합니다. read.csv 함수를 사용할 때의 주요 이점은 다음과 같습니다.

  • 여러 Excel 파일 가져 오기
  • 대용량 파일 가져 오기
  • 정기적으로 업데이트되는 파일

read.csv 함수를 사용하려면 각 Excel 문서를 수동으로 열고 저장해야하므로 시간이 많이 걸리고 매우 지루합니다. 따라서 Schaun의 기능을 사용하여 워크 플로를 자동화하는 것은 큰 도움이됩니다.

이 솔루션에 대한 Schaun의 큰 소품.


4

나에게 openxlx 패키지는 가장 쉬운 방법으로 작동했습니다.

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

2

운영 체제는 무엇입니까? 실행중인 R 버전 (32 비트 또는 64 비트)은 무엇입니까? 어떤 버전의 Java를 설치 했습니까?

read.xlsx()기능을 처음 사용하기 시작했을 때 비슷한 오류가 발생 했는데 내 문제 (귀하의 문제와 관련이있을 수도 있고 아닐 수도 있습니다. 최소한이 응답도 "이것도 시도"로보아야 함)가 비 호환성과 관련이 있음을 발견했습니다. 64 비트 Java를 사용하는 .xlsx pacakge. .xlsx 패키지에는 32 비트 Java가 필요합니다.

32 비트 R을 사용하고 32 비트 Java가 설치되어 있는지 확인하십시오. 이것은 귀하의 문제를 해결할 수 있습니다.


2

R이 실제로 파일을 찾을 수 있는지 확인했습니다. 예 : file.exists ( "C : /AB_DNA_Tag_Numbers.xlsx")? – Ben Bolker 2011-08-14 23:05

위의 의견으로 문제가 해결되었을 것입니다.

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

그 후에는 잘 작동합니다.


1

OpenDocument 스프레드 시트 파일 ( ods ) 또는 이전 Excel 형식으로 내보내고 위에서 언급 한 ODS 판독기 또는 Excel 판독기로 가져 오는 경우 여러 탭과 더 많은 서식 정보를 유지할 수 있습니다 .


1

여기에 많은 사람들이 언급했듯이, 나는 똑같은 것을 쓰고 있지만 추가 요점이 있습니다!

처음에는 R Studio에 다음 두 패키지가 설치되어 있는지 확인해야합니다.

  1. "readxl"
  2. "XLConnect"

R에서 패키지를로드하려면 아래 기능을 사용할 수 있습니다.

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

검색은 R Studio에서 사용 가능한 현재 패키지 목록을 표시합니다.

이 두 패키지가 있더라도 "xlsx"파일을 읽는 동안 문제가 발생할 수 있으며 오류는 "error : more columns than column name"과 같을 수 있습니다.

이 문제를 해결하려면 Excel 시트 "xlsx"를 다음 위치에 다시 저장하면됩니다.

"CSV (쉼표로 구분)"

그리고 당신의 인생은 매우 쉬울 것입니다 ....

즐기세요 !!


1

위의 모든 답변에 대해 매우 열심히 노력했습니다. 그러나 실제로는 Mac을 사용했기 때문에 도움이되지 않았습니다. 리오 라이브러리는 이 가져 오기 기능이 기본적으로 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.