KuboWeb top

更新: 2018-01-16 12:26:08

生態学のデータ解析 - R-primer/R 基本データクラス

  • R のとりかかり, R-primer/data.frame 実習 1

    Rlogo

  • R には多くのデータクラス (データの種類やデータ「格納」方法) があります
  • ここでは (よく使う) データの種類をあらわすデータクラス 5 種類について簡単に説明します.

もくじ


データのクラスとは? 

オブジェクトとクラス 

  • R ではデータを格納している単位のことをオブジェクトと呼びます
    • 下の例では,x は 1, 2, 3, 4 といったデータを格納しているオブジェクトで,ユーザーによって x という名前がつけられています
> x <- 1:4
> x
[1] 1 2 3 4

関数 class() 

  • 関数 class() を使うとオブジェクトのクラス名がわかります
  • データが vector である x に格納されているときに,class(x) とすると xデータの種類 を表示します
    • ここではそのデータの種類のうち numeric, integer, logical, character, factor について簡単に説明します
    • この中でもっとも「めんどうかつ便利」な factor クラスの説明がここでのゴールです
> x <- 1:4
> x
[1] 1 2 3 4
> class(x)
[1] "integer"
> x <- rnorm(5)
> x
[1] -0.065804 -0.649128 -0.502629 -1.390060 -0.653706
> class(x)
[1] "numeric"

数値クラス: numeric 

  • 数値データは numeric クラスのオブジェクトになります
> x <- rnorm(5)
> x
[1] -0.065804 -0.649128 -0.502629 -1.390060 -0.653706
> class(x)
[1] "numeric"

整数クラス: integer 

  • 数値データのうち整数は integer クラスのオブジェクトになります
> x <- 1:4
> x
[1] 1 2 3 4
> class(x)
[1] "integer"

論理クラス: logical 

  • R の中で TRUEFALSE は特別な意味をもつ値で,logical クラスになります
    • TRUE (または T) と FALSE (または F) はそれぞれ命題の真と偽をあらわしています
    • help(logical)
  • logical クラスのオブジェクトは as.numeirc() で integer クラスになります
    • 逆に integer クラスのオブジェクトは as.logical() で logical になります
> x <- c(TRUE, FALSE)
> x
[1]  TRUE FALSE
> class(x)
[1] "logical"
> as.numeric(x)
[1] 1 0
> as.logical(c(0, 1, 2, 3))
[1] FALSE  TRUE  TRUE  TRUE

文字クラス: character 

  • 文字のあつまりで表現されるデータは character クラスになります
    • help(character)
    • character クラスのデータを表示させると double quotation マークに囲われた値が表示されます
> x <- c("abc", "xyz")
> x
[1] "abc" "xyz"
> class(x)
[1] "character"

因子クラス: factor 

  • factor はめんどうで便利なクラスです
  • R を使うときには factor の理解が必要不可欠になります

factor はどこにあらわれるか 

  • R-primer/data.frame 実習 1 で示しているように,read.csv()data.csv を読みこむと下のようになります
    • このとき treatment 列は文字データを読みこんでいるにもかかわらず,character ではなく factor クラスの列とされます
> d <- read.csv("data.csv")
> d
   treatment size seed
1    control 21.3    9
2       trtX 24.2   19
3    control 12.0    1
4       trtX 16.1    4
5    control 21.8   13
6       trtX 20.2    6
7    control 22.7    8
8       trtX 23.8    8
9    control 19.5    7
10      trtX 26.4   22
11   control 20.1    3
12      trtX 27.3   31
13   control 22.5   14
14      trtX 21.8   19
15   control 18.6    4
16      trtX 25.3   26
17   control 23.5   11
18      trtX 19.7    6
19   control 27.9   22
20      trtX 22.0   17

> class(d$treatment)
[1] "factor"

factor の「みかけ」と実体 

  • 上の例で作った data.frame dd$treatment 列は factor クラスです
    • d$treatment のみかけ: 文字クラスのようにみえる
    • d$treatment の実体: integer クラスである
    • つまり下に示しているように,ここでは 1 という値が control というみかけをもち,2 という値が "trtX というみかけをもっています
> d$treatment
 [1] control trtX    control trtX    control trtX    control trtX    control trtX   
[11] control trtX    control trtX    control trtX    control trtX    control trtX   
Levels: control trtX
> d$treatment[1]
[1] control
Levels: control trtX
> as.character(d$treatment)
 [1] "control" "trtX"    "control" "trtX"    "control" "trtX"    "control" "trtX"   
 [9] "control" "trtX"    "control" "trtX"    "control" "trtX"    "control" "trtX"   
[17] "control" "trtX"    "control" "trtX"   
> as.numeric(d$treatment)
 [1] 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2