ExcelファイルをR、xlsx、またはxlsにインポートする


89

誰かが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
何回やってるの?1回だけの場合は、ほとんどの場合、Excelを使用して、などのよりオープンな形式にエクスポートするのが最善.csvです。
Ari B. Friedman

gsk3:はい、または'09以降にExcel 2007のインポートがサポートされているGoogleドキュメント:google.com/support/forum/p/Google%20Docs/…(うまくいけば今はうまく機能しています。)
Benjamin Atkin '13

6
これはRのどのバージョンですか?どのオペレーティングシステム?read.xlsxのバージョンは何ですか?投稿ガイドを読みましたか?</ ripleybot>
Spacedman、2011


9
Rが実際にファイルを見つけられることを確認しましたfile.exists("C:/AB_DNA_Tag_Numbers.xlsx")
ベンボルカー、2011

回答:


101

面倒な外部依存関係がないソリューションの場合は、次のようになりreadxlます。

readxlパッケージを使用すると、ExcelからRにデータを簡単に取得できます。既存のパッケージの多く(gdata、xlsx、xlsReadWriteなど)と比較して、readxlには外部の依存関係がないため、すべてのオペレーティングシステムに簡単にインストールして使用できます。1つのシートに格納されている表形式のデータを操作するように設計されています。

Readxlは、従来の.xls形式と最新のxmlベースの.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(...))、あなたはもう少し簡潔で同じAを行うことができますreadWorksheetFromFile(...)
ヒュー

これは、read.xlsxが「java.lang.IllegalArgumentException:Cell index
is

23

私は間違いなく、パッケージよりもかなり成熟read.xlsしているgdataパッケージの関数を試しxlsxます。Perlが必要かもしれません...


21

更新

以下の回答は少し古くなっているのでreadxlパッケージに注意を向けます。Excelシートが適切にフォーマット/ レイアウトされている場合、readxlを使用してワークブックから読み取ります。シートのフォーマットやレイアウトが適切でない場合でも、CSVにエクスポートし、Rの問題をvia read.csv()またはplain oldのいずれかで処理しますreadLines()

元の

私が好む方法は、個々のExcelシートをコンマ区切り値(CSV)ファイルに保存することです。Windowsでは、これらのファイルはExcelに関連付けられているため、Excelのダブルクリックで開く機能を失うことはありません。

CSVファイルはread.csv()、を使用してRに読み込むことができます。または、ある場所にいる場合、またはヨーロッパの設定(,は小数点以下の桁数として使用されます)が設定されたコンピューターを使用している場合は、を使用してRに読み込むことができますread.csv2()

これらの関数には、適切にフォーマットされたファイルの読み取りを簡単にする適切なデフォルトがあります。最初の行または列にサンプルまたは変数のラベルを保持するだけです。

CSVでファイルを保存することの追加の利点は、ファイルがプレーンテキストであるため、非常に簡単に渡せることと、どこにでも開くことを確信できることです。Excelでデータを確認または編集する必要はありません。


6
ワークブックには複数のワークシートが含まれ、それぞれに最大100k行があるため、csvは役に立ちません。ありがとう
nolyugo

7
個々のシートをCSVファイルとして保存しました。これらはプレーンテキストであるため、ワークシートのサイズは重要ではありません。Excelワークブックでの作業を主張する場合、データをRに読み込むために使用できるオプションははるかに複雑になります。代替策については、パッケージRODBC、RDCOMを参照してください。あなたが特定されている場合は最後に、あなたが使用するための手順に従っているread.xlsx() と、潜在的なバグを報告するために、パッケージのメンテナに電子メールを送り、その後、そのパッケージ及びRの最新バージョンを持っています。
Gavin Simpson

それは本当に、データとOS間で必要な相互運用性のレベルに依存します。ラベルまたは要素に非ASCIIがあり、Mac / Win / Lin全体で作業する必要があるとすぐに、ExcelへのエクスポートまたはExcelからのインポートを行うと、さまざまな奇妙さが発生し始めます。Excelはutf-8を適切に処理することができません(その点ではcsv)。したがって、その場合は、Excelを使用するか、別のスプレッドシートアプリケーションに移動します(後者は常に可能とは限りません)。
FvD 2014年

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 2014年

1
私はかなり大きなExcelブックをいくつか扱っていますが、そのような大きなファイルを処理できるのはopenxlxsだけです。
Jose R

残念ながら、これには「rtools」が必要です
フェルディ

@Ferdi。そうは思わない!パッケージを一度作成するだけです。それ以上の使用はできません。
RockScience 2017年

5

同じ問題が発生し、Rがエラーを表示する場合-関数「.jnew」が見つからない場合-ライブラリrJavaをインストールするだけです。または、すでに持っている場合は、ライブラリ(rJava)を実行するだけです。それが問題になるはずです。

また、csvファイルとtxtファイルの方が扱いやすいことは誰もが理解できるはずですが、人生は簡単ではなく、xlsxを開かなければならないこともあります。


1
バージョン2.8.2をロードgdataすると、起動メッセージが表示されます。gdata: read.xls support for 'XLSX' (Excel 2007+) files ENABLED.サウンドは、xlsxファイルを開くように
聞こえ

1
gdataバージョン2.8.2 xlsxがこのread.xls機能でファイルを読み込むことを確認できます。
ベン

4

xlxsパッケージがR 3.1.0用に更新されていないことに気付いた後、Schaun WheelerがExcelファイルをRにインポートする機能を最近発見しました。

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

ファイル名には「.xlsx」拡張子を付ける必要があり、関数を実行するときにファイルを開くことができません。

この機能は、他の人々の仕事にアクセスするのに本当に役立ちます。read.csv関数を使用する主な利点は、

  • 複数のExcelファイルをインポートする
  • 大きなファイルのインポート
  • 定期的に更新されるファイル

read.csv関数を使用するには、各Excelドキュメントを手動で開いて保存する必要があり、時間がかかり、非常に退屈です。したがって、Schaunの機能を使用してワークフローを自動化することは、非常に役立ちます。

このソリューションのショーンへの大きな小道具。


4

私にとって、openxlxパッケージは最も簡単な方法で機能しました。

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

2

あなたのオペレーティングシステムは何ですか?実行しているRのバージョン:32ビットまたは64ビット?どのバージョンのJavaをインストールしましたか?

最初にread.xlsx()関数を使い始めたときに同様のエラーが発生し、私の問題(これはあなたの問題に関連する場合と関連しない場合があります。少なくとも、この応答は「これも試してください」と見なす必要があります)が非互換性に関連していることがわかりました64ビットJavaの.xlsxパッケージ。.xlsxパッケージには32ビットJavaが必要であると私はかなり確信しています。

32ビットRを使用し、32ビットJavaがインストールされていることを確認します。これで問題が解決する場合があります。


2

Rが実際にファイルを見つけられることを確認しました。例:file.exists( "C:/AB_DNA_Tag_Numbers.xlsx")?–ベンボルカー、2011年8月14日23:05

上記のコメントはあなたの問題を解決したはずです:

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

その後は問題なく動作するはずです。


1

OpenDocumentスプレッドシートファイル(ods)または古いExcel形式にエクスポートし、ODSリーダーまたは上記のExcelリーダーでインポートすると、複数のタブとより多くの書式情報を保持できる場合があります。


1

ここで多くの人が述べたように、私は同じことを書いていますが、追加のポイントがあります!

最初に、R Studioに次の2つのパッケージがインストールされていることを確認する必要があります。

  1. 「readxl」
  2. 「XLConnect」

Rでパッケージをロードするには、以下の関数を使用できます。

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

検索すると、R Studioで使用可能な現在のパッケージのリストが表示されます。

これらの2つのパッケージがある場合でも、「xlsx」ファイルの読み取り中に問題が発生する可能性があり、エラーは「エラー:列名よりも列が多い」のようになる可能性があります。

この問題を解決するには、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.