2017-08-15 11 views
2

私は、ループして特定の不連続な列をデータフレームに読み込むExcelファイルをたくさん用意しています。このような基本的なもののためreadxl作品を使用すると:R読み取りは列名で実行されます

library(readxl) 
library(plyr) 
wb <- list.files(pattern = "*.xls") 
dflist <- list() 

for (i in wb){ 
    dflist[[i]] <- data.frame(read_excel(i, sheet = "SheetName", skip=3, col_names = TRUE)) 
} 

# now put them into a data frame 
data <- ldply(dflist, data.frame, .id = NULL) 

これは動作します(ほとんど)が、問題は、私のExcelファイルを約114の列を持っていると私は、特定のものにしたいです。また、Rcol_typesを推測することを許可したくありません。最初の値が数値で始まり、列全体を数値として解釈しようとすると、文字列の一部が壊れてしまい、クラッシュするためです。だから私の質問です:特定の、不連続な列を指定するにはどうすればいいですか? range引数は、不連続な列の読み取りを許可しないcell_rangerパッケージを使用します。だから何か別の?

+0

エクセルファイルをcsvファイルとして保存してインポートすることは可能ですか? – user1945827

+0

私はそれらの100以上、複数のシートを持っているので...いいえ:) – Alex

答えて

2

read.xlsxの機能openxlsxパッケージには、読み取る列を指定する数値インデックスをとるパラメータcolsがあります。

少なくとも1つの列が文字の場合は、すべての列を文字として読み取っているようです。

編集:.xlsファイルの場合は、XLConnectパッケージを参照してください。 rJavaのインストールは難しいかもしれません。 keepdropのパラメータはreadWorksheet()で、列名も受け入れます。パラメータcolTypesは、列の型を扱います。これは私のために働くこの方法:

options(java.home = "C:\\Program Files\\Java\\jdk1.8.0_74\\") 
library(rJava) 
library(XLConnect) 
workbook <- loadWorkbook("test.xls") 
readWorksheet(workbook, sheet = "Sheet0", keep = c(1,2,5)) 
+0

ありがとう。はい、私はそれを使用すると思ったが、私のファイルは 'xls'形式ではなく、' xlsx'形式であるので、パッケージはそれを処理できません。 – Alex

+0

@Alex私の答えが更新され、.xlsファイルで動作するはずのソリューションが追加されました。 – Ape

+0

@Alex:これは美しく動作します。ありがとうございました! – Alex

関連する問題