2013-08-16 1 views
6

なぜcolClassesという引数がread.xlsxで機能しないのでしょうか?read.xlsxとcolClasses

私はサンプル* .xlsx形式のファイルを作成します。

> d2 = read.xlsx('test.xlsx', sheetName='Sheet1') 
> str(d2) 
'data.frame': 3 obs. of 4 variables: 
$ A: Factor w/ 3 levels "A","B","C": 1 2 3 
$ B: Factor w/ 3 levels "a","b","c": 1 2 3 
$ C: num 1 2 3 
$ D: num 1.1 NA NA 
> d2 = read.xlsx('test.xlsx', sheetName='Sheet1', colClasses=c(B='character', 'A'='character')) 
> str(d2) 
'data.frame': 3 obs. of 4 variables: 
$ A: Factor w/ 3 levels "A","B","C": 1 2 3 
$ B: Factor w/ 3 levels "a","b","c": 1 2 3 
$ C: num 1 2 3 
$ D: num 1.1 NA NA 

問題がcolClassesで効果がないようです:colClasses引数はなしとし、read.xlsxでそれを読むことを試行し

> library(xlsx) 
> d1 = data.frame(A=LETTERS[1:3], B=letters[1:3], C=1:3, D=c(1.1, NA, NA)) 
> str(d1) 
'data.frame': 3 obs. of 4 variables: 
$ A: Factor w/ 3 levels "A","B","C": 1 2 3 
$ B: Factor w/ 3 levels "a","b","c": 1 2 3 
$ C: int 1 2 3 
$ D: num 1.1 NA NA 
> write.xlsx(d1, 'test.xlsx', sheetName='Sheet1', row.names=F, showNA=F) 

を。何か案は?

ありがとうございました。

アレクセイ

P.S.私はR 3.0.1、xlsx 0.5.1

答えて

9

colClasses=が動作していますが、インポートデータが文字列を因数に変換するときのシステムのデフォルト動作に問題があります。

test.xlsxをインポートし、すべての列が"character"であるように設定すると、すべての列が要素(数値)として作成されます。文字はあなたが機能read.xlsx()に引数stringsAsFactors=FALSEを追加することができます要因に変換されていないことを確認するために

d2 = read.xlsx('test.xlsx', sheetName='Sheet1', colClasses=rep("character",4)) 
str(d2) 
'data.frame': 3 obs. of 4 variables: 
$ A: Factor w/ 3 levels "A","B","C": 1 2 3 
$ B: Factor w/ 3 levels "a","b","c": 1 2 3 
$ C: Factor w/ 3 levels "1","2","3": 1 2 3 
$ D: Factor w/ 1 level "1.1": 1 NA NA 

d2 = read.xlsx('test.xlsx', sheetName='Sheet1', 
       colClasses=c(B='character', A='character'),stringsAsFactors=FALSE) 

str(d2) 
'data.frame': 3 obs. of 4 variables: 
$ A: chr "A" "B" "C" 
$ B: chr "a" "b" "c" 
$ C: num 1 2 3 
$ D: num 1.1 NA NA 
+0

Didzis、ありがとう、これは素晴らしい作品です。 'stringsAsFactors'は文字ベクトルを要素としてキャストする2回目の変換を行うのを忘れていました。どうもありがとうございました。 – user2690051

関連する問題