ExcelファイルをRに直接読み込むにはどうすればよいですか? または、最初にデータをテキストまたは CSV ファイルにエクスポートし、そのファイルを R にインポートする必要がありますか?
12 に答える
@Chase の推奨事項を繰り返します: XLConnectを使用します。
私の意見では、XLConnect を使用する理由は次のとおりです。
- クロスプラットフォーム。XLConnect は Java で記述されているため、R コードを変更することなく (パス文字列を除く)、Win、Linux、Mac で実行できます。
- 他にロードするものはありません。XLConnect をインストールするだけで、生活を続けることができます。
- Excelファイルの読み取りについてのみ言及しましたが、XLConnectは、セルの書式設定の変更を含め、Excelファイルも書き込みます。これは、Win だけでなく、Linux または Mac からも実行できます。
XLConnect は、他のソリューションに比べてやや新しいため、ブログ投稿やリファレンス ドキュメントで言及されることはあまりありません。私にとってはとても役に立ちました。
そして今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 の外部の依存関係です。多くの人が他の理由でそれらをインストールしていますが、 .
はい。R wiki の関連ページを参照してください。簡単な答え:ほとんどの場合read.xls
、パッケージからgdata
動作します (ただし、システムに Perl をインストールする必要があります。通常、MacOS と Linux では既に有効ですが、Windows では追加の手順が必要です。つまり、http://strawberryperl.com/を参照してください)。 )。R wikiページにリストされているさまざまな警告と代替手段があります。
これを直接実行しない唯一の理由は、スプレッドシートを調べて、不具合 (奇妙なヘッダー、複数のワークシート [一度に 1 枚しか読み取れませんが、明らかにそれらすべてをループすることができます]) がないかどうかを確認することです。 、含まれるプロットなど)。しかし、単純な数値と文字データ (つまり、カンマ形式の数値、日付、ゼロ除算エラーのある数式、欠損値などではない) を含む整形式の長方形のスプレッドシートの場合、通常は問題ありません。このプロセスで。
EDIT 2015-10月:他の人がここでコメントしているように、openxlsx
andreadxl
パッケージはパッケージよりもはるかに高速で、xlsx
実際にはより大きな Excel ファイル (>1500 行 & > 120 列) を開くことができます。@MichaelChiricoreadxl
は、速度が優先される場合に優れていることを示し、パッケージopenxlsx
によって提供される機能を置き換えます。xlsx
2015 年に Excel ファイルの読み取り、書き込み、および変更を行うためのパッケージを探している場合はopenxlsx
、xlsx
.
2015年より前: xlsx
packageを使用しました。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
指定により、列が因子に変換されます。時間の使用Date
とPOSIXct
オプション。
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)))
私は幸運を祈りましたXLConnect
: http://cran.r-project.org/web/packages/XLConnect/index.html
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が好きでオススメできます。
別の解決策は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
パッケージは、同じ名前の拡張子を処理できます。
上記の他の多くの回答で述べたように、XLS/X ファイルに接続して合理的な方法でデータを取得する優れたパッケージが多数あります。ただし、クリップボード (または .csv) ファイルを使用して Excel からデータを取得しないでください。理由を確認する=1/3
には、Excel のセルに入力します。ここで、表示される小数点の数を 2 に減らします。次に、データをコピーして R に貼り付けます。CSV を保存します。どちらの場合も、Excel はインターフェイスを介して表示されたデータのみを保持しており、実際のソース データの精度がすべて失われていることに気付くでしょう。