一所懸命に手抜きする

監査の仕事をしています。ITを利用し、良い意味で「手抜き」することは効率化と精度アップに役立つと思うんです。部下への引き継ぎのためにまずは諸々頭から引っ張り出そうとブログを始めました。

[ Main ]  [ 別館 ]
当ブログで取り上げられている事案やデータベース、人物等はすべてフィクションです。

factor型(1)_Levels:・・・って?

Levels:・・・って?

 Rで data.frame を処理して得られた戻り値の下に
 Levels: ○,○・・・ のように記載されていることがあります。
 これは何でしょうか。
 例として、

#Sample1
nm<-c(1,2,3,4)
jp<-c("支社番号","支社名","支店番号","支店名")
df<-data.frame(jp,nm)
df[jp=="支社番号",]$nm
##[1] 1

#Sample2
en<-c("S001","S002","S003","S004")
jp<-c("支社番号","支社名","支店番号","支店名")
df<-data.frame(en,jp)
df[jp=="支社番号",]$en
##[1] S001
##Levels: S001 S002 S003 S004

 sample1の戻り値は[1] 1 だけなのに対して、
 sample2の戻り値は[1] S001 の下に Levels: S001 S002 S003 S004 と記載されています。
 これは何でしょうか。

Levels:・・・ってfactor型

 Levels: ○,○・・・ のように記載されているのはfactor型(因子)です。
 文字型のデータをデータフレームに引き渡すとfactor型として処理されます。
 次のサンプルを見てみます。

#Sample3
nm<-c("1","2","3","4")
jp<-c("支社番号","支社名","支店番号","支店名")
df<-data.frame(nm,jp)
df[jp=="支社番号",]$nm
##[1] 1
##Levels: 1 2 3 4

 sample1で nm<-c(1,2,3,4) と数値で引き渡したところを、
 sample2は en<-c("S001","S002","S003","S004")と文字として引き渡しています。

文字列をdata.frameにするとfactor型になる

 sample3は nm<-c("1","2","3","4")と文字として引き渡しています。
 つまり、数値であっても文字型としてデータフレームに引き渡すとfactor型として処理されます。
 そのため、この例でLevels: 1 2 3 4と出力されています。

factor型にしたくない時はstringsAsFactors=FALSEをつける

 data.frame(.....,stringsAsFactors=FALSE)のようにしてやると

#Sample4
nm<-c("1","2","3","4")
jp<-c("支社番号","支社名","支店番号","支店名")
df<-data.frame(nm,jp,stringsAsFactors=FALSE)
df[jp=="支社番号",]$nm
##[1] "1"

 文字列でも因子型になることなく文字列とて扱われました。基本的なことですがつまずきやすいところだと思います。

広告を非表示にする