95

ExcelファイルをRに直接読み込むにはどうすればよいですか? または、最初にデータをテキストまたは CSV ファイルにエクスポートし、そのファイルを R にインポートする必要がありますか?

4

12 に答える 12

49

@Chase の推奨事項を繰り返します: XLConnectを使用します。

私の意見では、XLConnect を使用する理由は次のとおりです。

  1. クロスプラットフォーム。XLConnect は Java で記述されているため、R コードを変更することなく (パス文字列を除く)、Win、Linux、Mac で実行できます。
  2. 他にロードするものはありません。XLConnect をインストールするだけで、生活を続けることができます。
  3. Excelファイルの読み取りについてのみ言及しましたが、XLConnectは、セルの書式設定の変更を含め、Excelファイルも書き込みます。これは、Win だけでなく、Linux または Mac からも実行できます。

XLConnect は、他のソリューションに比べてやや新しいため、ブログ投稿やリファレンス ドキュメントで言及されることはあまりありません。私にとってはとても役に立ちました。

于 2011-05-23T16:51:33.053 に答える
48

そして今readxlがあります:

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

readxl は libxls C ライブラリの上に構築されており、基礎となるバイナリ形式の複雑さの多くを抽象化しています。

従来の .xls 形式と .xlsx の両方をサポートしています

readxl は CRAN から入手できます。または、次の方法で github からインストールできます。

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

使用法

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 の外部の依存関係です。多くの人が他の理由でそれらをインストールしていますが、 .

于 2015-03-17T19:54:32.530 に答える
41

はい。R wiki の関連ページを参照してください。簡単な答え:ほとんどの場合read.xls、パッケージからgdata動作します (ただし、システムに Perl をインストールする必要があります。通常、MacOS と Linux では既に有効ですが、Windows では追加の手順が必要です。つまり、http://strawberryperl.com/を参照してください)。 )。R wikiページにリストされているさまざまな警告と代替手段があります。

これを直接実行しない唯一の理由は、スプレッドシートを調べて、不具合 (奇妙なヘッダー、複数のワークシート [一度に 1 枚しか読み取れませんが、明らかにそれらすべてをループすることができます]) がないかどうかを確認することです。 、含まれるプロットなど)。しかし、単純な数値と文字データ (つまり、カンマ形式の数値、日付、ゼロ除算エラーのある数式、欠損値などではない) を含む整形式の長方形のスプレッドシートの場合、通常は問題ありません。このプロセスで。

于 2011-05-23T15:22:54.773 に答える
29

EDIT 2015-10月:他の人がここでコメントしているように、openxlsxandreadxlパッケージはパッケージよりもはるかに高速で、xlsx実際にはより大きな Excel ファイル (>1500 行 & > 120 列) を開くことができます。@MichaelChiricoreadxlは、速度が優先される場合に優れていることを示し、パッケージopenxlsxによって提供される機能を置き換えます。xlsx2015 年に Excel ファイルの読み取り、書き込み、および変更を行うためのパッケージを探している場合はopenxlsxxlsx.

2015年より前: xlsxpackageを使用しました。Excel と R のワークフローが変わりました。Excel シートを .txt 形式で保存するかどうかを尋ねる煩わしいポップアップはもうありません。このパッケージは、Excel ファイルも書き込みます。

ただし、read.xlsx大きな Excel ファイルを開くと、機能が遅くなります。read.xlsx2関数はかなり高速ですが、data.frame 列のベクトル クラスを問いません。関数を使用する場合は、コマンドを使用colClassesして目的の列クラスを指定する必要がありますread.xlsx2。以下に実際の例を示します。

read.xlsx("filename.xlsx", 1)ファイルを読み取り、data.frame 列クラスをほぼ有用にしますが、大規模なデータ セットの場合は非常に遅くなります。ファイルにも機能し.xlsます。

read.xlsx2("filename.xlsx", 1)の方が高速ですが、列クラスを手動で定義する必要があります。ショートカットは、コマンドを 2 回実行することです (以下の例を参照)。character指定により、列が因子に変換されます。時間の使用DatePOSIXctオプション。

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)))
于 2013-01-22T10:23:01.453 に答える
19

私は幸運を祈りましたXLConnect: http://cran.r-project.org/web/packages/XLConnect/index.html

于 2011-05-23T15:39:56.850 に答える
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)

個人的にはRODBCが好きでオススメできます。

于 2011-05-23T16:12:12.353 に答える
6

別の解決策はxlsReadWriteパッケージです。追加のインストールは必要ありませんが、最初に使用する前に追加の shlib をダウンロードする必要があります。

require(xlsReadWrite)
xls.getshlib()

これを忘れると、完全なフラストレーションを引き起こす可能性があります。そこにいたことなど...

補足: テキストベースの形式 (csv など) に変換して、そこから読み込むことを検討してください。これにはいくつかの理由があります:

  • ソリューション (RODBC、gdata、xlsReadWrite) が何であれ、データが変換されると奇妙なことが起こる可能性があります。特に日付はかなり面倒です。このHFWutilsパッケージには、EXCEL の日付を処理するためのツールがいくつか含まれています (@Ben Bolker のコメントによる)。

  • 大きなシートがある場合、テキスト ファイルでの読み取りは、EXCEL からの読み取りよりも高速です。

  • .xls および .xlsx ファイルの場合、別のソリューションが必要になる場合があります。EG xlsReadWrite パッケージは現在 .xlsx AFAIK をサポートしていません。gdata.xlsx サポートのために追加の perl ライブラリをインストールする必要があります。xlsxパッケージは、同じ名前の拡張子を処理できます。

于 2011-05-23T15:44:16.943 に答える
5

上記の他の多くの回答で述べたように、XLS/X ファイルに接続して合理的な方法でデータを取得する優れたパッケージが多数あります。ただし、クリップボード (または .csv) ファイルを使用して Excel からデータを取得しないでください。理由を確認する=1/3には、Excel のセルに入力します。ここで、表示される小数点の数を 2 に減らします。次に、データをコピーして R に貼り付けます。CSV を保存します。どちらの場合も、Excel はインターフェイスを介して表示されたデータのみを保持しており、実際のソース データの精度がすべて失われていることに気付くでしょう。

于 2014-10-08T20:02:10.497 に答える