ExcelファイルをRに直接読み込むにはどうすればよいですか?または、最初にデータをテキストファイルまたはCSVファイルにエクスポートし、そのファイルをRにインポートする必要がありますか?
はい。 R wikiの関連ページ を参照してください。簡単な答え:gdata
パッケージのread.xls
はほとんどの場合動作します(システムにPerlをインストールする必要がありますが、通常はMacOSおよびLinuxで既に当てはまりますが、Windowsでは追加の手順を実行しますが、すなわち http://strawberryperl.com/ )を参照してください。 R wikiページにリストされているさまざまな警告と代替があります。
私がこれを直接行わない唯一の理由は、スプレッドシートをチェックして、グリッチ(奇妙なヘッダー、複数のワークシート[一度に1つしか読むことができませんが、明らかにすべてをループすることができます] 、含まれるプロットなど)。しかし、普通の数字と文字データ(つまり、コンマ形式の数字、日付、ゼロ除算エラー、欠損値などの式ではないなど)を含む、整形式の長方形のスプレッドシートの場合、通常は問題ありません。このプロセスで。
@Chaseが推奨したことを繰り返してみましょう: XLConnect を使用します。
私の意見では、XLConnectを使用する理由は次のとおりです。
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
package が必要であり、Rtools(Windowsの場合)またはXcode(OSXの場合)が必要ですareRの外部の依存関係。多くの人が他の理由でそれらをインストールしています。
EDIT 2015-October:他の人がここでコメントしているように openxlsx
と readxl
パッケージは群を抜いてxlsx
パッケージよりも高速で、実際には大きなExcelファイル(> 1500行&> 120列)を開くことができます。 @MichaelChiricoは、速度が優先され、readxl
がopenxlsx
パッケージによって提供される機能を置き換える場合、xlsx
の方が優れていることを示しています。 2015年にExcelファイルの読み取り、書き込み、および変更を行うパッケージを探している場合は、openxlsx
ではなくxlsx
を選択してください。
2015年以前:私は xlsx
package を使用しました。 ExcelとRでワークフローが変更されました。Excelシートを.txt形式で保存するかどうかを確認するポップアップが表示されることはなくなりました。パッケージはExcelファイルも書き込みます。
ただし、大きなExcelファイルを開くと、read.xlsx
関数が遅くなります。 read.xlsx2
関数はかなり高速ですが、data.frame列のベクトルクラスを照会しません。 read.xlsx2
関数を使用する場合は、colClasses
コマンドを使用して目的の列クラスを指定する必要があります。実用的な例を次に示します。
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が好きで、それをお勧めできます。
パッケージopenxlsx
を今日試してみました。それは本当にうまく(そして高速に)働きました。
別の解決策は xlsReadWrite
パッケージです。これは追加のインストールを必要としませんが、最初に使用する前に追加のshlibをダウンロードする必要があります。
require(xlsReadWrite)
xls.getshlib()
これを忘れると、完全なフラストレーションが生じます。そこに行って...
補足:テキストベースの形式(csvなど)への変換を検討し、そこから読み込むことをお勧めします。これにはいくつかの理由があります:
ソリューション(RODBC、gdata、xlsReadWrite)に関係なく、データが変換されると奇妙なことが起こります。特に日付はかなり面倒です。 HFWutils
パッケージには、Excelの日付を処理するツールがいくつかあります(@Ben Bolkerのコメントによる)。
大きなシートがある場合、テキストファイルの読み取りはExcelからの読み取りよりも高速です。
.xlsおよび.xlsxファイルの場合、異なるソリューションが必要になる場合があります。例えば、xlsReadWriteパッケージは現在.xlsx AFAIKをサポートしていません。 gdata
では、.xlsxをサポートするために追加のPerlライブラリをインストールする必要があります。 xlsx
パッケージは同じ名前の拡張子を処理できます。
他の多くの回答で前述したように、XLS/Xファイルに接続して合理的な方法でデータを取得する多くの優れたパッケージがあります。ただし、どのような状況でも、クリップボード(または.csv)ファイルを使用してExcelからデータを取得しないでください。理由を確認するには、Excelのセルに=1/3
と入力します。次に、表示される小数点の数を2に減らします。次に、データをコピーしてRに貼り付けます。CSVを保存します。どちらの場合でも、Excelはインターフェイスを通じて表示されるデータのみを保持し、実際のソースデータの精度がすべて失われていることに気付くでしょう。
@Mikkoが提供する答えを拡張すると、きちんとしたトリックを使用して、事前に列のクラスを「知る」必要なく、速度を上げることができます。単にread.xlsx
を使用して、限られた数のレコードを取得してクラスを決定し、その後にread.xlsx2
を続けます。
例
# just the first 50 rows should do...
df.temp <- read.xlsx("filename.xlsx", 1, startRow=1, endRow=50)
df.real <- read.xlsx2("filename.xlsx", 1,
colClasses=as.vector(sapply(df.temp, mode)))
Excelファイルは、次のようにRに直接読み込むことができます。
my_data <- read.table(file = "xxxxxx.xls", sep = "\t", header=TRUE)
Readxlパッケージを使用したxlsおよびxlxsファイルの読み取り
library("readxl")
my_data <- read_Excel("xxxxx.xls")
my_data <- read_Excel("xxxxx.xlsx")