Rではデータをオブジェクトとして取り扱います.そして,データが代入されたオブジェクトはデータ型(data type)とデータ構造(data structure)があります.ここでは,まずデータ型について解説します.データ型とはデータの性質のことです.Rには数値,論理値,文字列という3つの代表的なデータ型があります.数値は numeric,論理値は logical,文字列は character と称されます.numeric は量的な情報を表現するためのデータ型です.numeric の他に整数(integer)や複素数(complex)などのデータ型もありますが,実データを分析する際にはそこまで細かく区別する必要はありません.logical はTRUEとFALSEの2値で,比較演算や論理演算の結果として返されるデータ型です.character はテキストデータを扱うためのデータ型であり,算術演算の対象とはならないデータ型です.このデータ型は分析を行うときの変数や観測個体のラベルに使用されることが多いです.
オブジェクトに代入されている値のデータ型を確認するためにはclass関数を使用します.なお,class関数は汎用性が高く,データ構造の確認にも使用されます.
X <- 5
class(X)
[1] "numeric"
Y <- TRUE
class(Y)
[1] "logical"
Z <- "Hello World"
class(Z)
[1] "character"
上掲のように,文字列をオブジェクトに代入するときはダブルクォーテーションが必要にありますが,論理値を代入するときにはダブルクォーテーションは不要です.TRUEやFALSEにダブルクォーテーションを付けると,論理値ではなく文字列として代入されてしまうので注意が必要です.Zに代入されている値を出力すると,Hello Worldという文字列の両端にダブルクォーテーションが付くことが分かると思います.他方,Yを出力すると,TRUEの両端にはダブルクォーテーションが付きません.オブジェクトに代入されている値を確認したときに,ダブルクォーテーションが付いていればデータ型は文字列であると覚えておくと良いでしょう.
また,Rでは numeric が量的変数に対応していると言えますが,質的変数に対応するデータ型はありません.Rでは因子というデータ構造を用いることで質的変数の分析を行います.因子についてはデータ構造を解説するときに採り上げます.
データ型は相互に変換することが可能です.例えば,数値を数字(文字列)に変換したり,反対に数字を数値に変換できます.実行することはほとんどありませんが,論理値を文字列に,文字列として代入されてしまったTRUEやFALSEを論理値に変換することも可能です.数値に変換するにはas.numeric関数,論理値に変換するにはas.logical関数,文字列に変換するにはas.character関数を使用します.
まず,数値を数字(文字列)に変換する例を見ていきます.Xに 5 という数値を代入し,as.character関数によってデータ型を文字列に変換し,それをXcharに代入します.Xcharの値を出力すると 5 という数字の両端に,文字列であることを示すダブルクォーテーションが付いています.
X <- 5
Xchar <- as.character(X)
Xchar
[1] "5"
次に,文字列を数値に変換します.数値に変換できる文字列は数字のみです.数字ではない文字列は数値には変換できず,欠損値となります.例として,上記のXcharをas.numeric関数を使用して数値に戻します.下記のXnumにはダブルクォーテーションが付いていません.
Xnum <- as.numeric(Xchar)
Xnum
[1] 5
論理値を他のデータ型に変換することはあまりありませんが,論理値の文字列への変換と文字列からの変換を見てみましょう.下掲のYcharにはTRUEの両端にダブルクォーテーションが付き,YとYlogiにはダブルクォーテーションが付きません.
Y <- TRUE
Ychar <- as.character(Y)
Ychar
[1] "TRUE"
Ylogi <- as.logical(Ychar)
Ylogi
[1] TRUE
次に,論理値を数値に変換について見ていきます.TRUEは 1 に変換され,FALSEは 0 に変換されます.反対に,1 という数値を論理値に変換するとTRUEに,0 はFALSEに変換されます。
Ytrue <- TRUE
Y1 <- as.numeric(Ytrue)
Y1
[1] 1
Yfalse <- FALSE
Y0 <- as.numeric(Yfalse)
Y0
[1] 0
X1 <- 1
Xtrue <- as.logical(X1)
Xtrue
[1] TRUE
X0 <- 0
Xfalse <- as.logical(X0)
Xfalse
[1] FALSE