R言語プログラミング: データ型・操作

統計解析・データマイニング言語である R言語のデータ型・操作をソースコードを用い紹介する。記載しているソースは、R Console上や EclipseでR-Scriptとして、そのまま実行可能である。

R Consoleでの実行例  (Rのインストール・環境設定はこちら)


EclipseでのR-Scriptとしての実行例  (RをEclipseで実行するための方法はこちら)

R のデータ型

Rのデータ型には integer(整数), numerical(実数), complex(複素数), character(文字), logical(論理)、および、Vector(ベクトル), matrix(マトリクス), data.frame(データフレーム), array(配列), list(リスト)がある。以下にそれぞれ説明する。

Vector

1次元(1行または1列)のデータセットVector (ベクトル)と呼ぶ。

ソースコード

price <- c(105,202,155,91) # price object に vector dataを代入
productname <- c("A", "B", "C", "D") # productname object に vector dataを代入
names(price)<- productname # price のラベルを productnameにする 

price # price を出力

price^2 # priceの2乗を出力
mean(price) #price vector の要素の平均を出力
round(mean(price),0) # price vector の要素の平均の小数点以下を四捨五入
length(price) # price vector の要素数を出力

実行結果

> price <- c(105,202,155,91) # price object に vector dataを代入
> productname <- c("A", "B", "C", "D") # productname object に vector dataを代入
> names(price)<- productname # price のラベルを productnameにする 
> 
> price # price を出力
  A   B   C   D 
105 202 155  91 
> 
> price^2 # priceの2乗を出力
    A     B     C     D 
11025 40804 24025  8281 
> mean(price) #price vector の要素の平均を出力
[1] 138.25
> round(mean(price),0) # price vector の要素の平均の小数点以下を四捨五入
[1] 138.2
> length(price) # price vector の要素数を出力
[1] 4

Matrix

表・行列の表現として、R言語には Matrix(マトリクス) と Data Frame(データフレーム)が用意されている。対象が全て数値で数値演算を扱う場合には Matrix を用いる。

ソースコード

price <- matrix(0,2,4) # 要素が 0 の 2行4列の行列を定義する
price # 行列 price を表示

productname <- c("A", "B", "C", "D")
cityname <- c("Tokyo","London")
colnames(price)<- productname # price のラベルを productnameにする 
rownames(price)<- cityname # price のラベルを productnameにする 
price[1,] <- c(105,202,155,91) # 1 行目に Vector を 入力
price[2,] <- c(107,199,154,99) # 2 行目に Vector を 入力
price # 行列 price を表示

dim(price) # price の次元(サイズ)を求める
nrow(price) # price の行数を求める
ncol(price) # price の列数を求める
(price[2,3] <- 156) # 数値を代入してその結果を出力する

実行結果

>price <- matrix(0,2,4) # 要素が 0 の 2行4列の行列を定義する
> price # 行列 price を表示
     [,1] [,2] [,3] [,4]
[1,]    0    0    0    0
[2,]    0    0    0    0
> 
> productname <- c("A", "B", "C", "D")
> cityname <- c("Tokyo","London")
> colnames(price)<- productname # price のラベルを productnameにする 
> rownames(price)<- cityname # price のラベルを citynameにする 
> price[1,] <- c(105,202,155,91) # 1 行目に Vector を 入力
> price[2,] <- c(107,199,154,99) # 2 行目に Vector を 入力
> price # 行列 price を表示
         A   B   C  D
Tokyo  105 202 155 91
London 107 199 154 99
> 
> dim(price) # price の次元を求める
[1] 2 4
> nrow(price) # price の行数を求める
[1] 2
> ncol(price) # price の列数を求める
[1] 4
> (price[2,3] <- 156) # 数値を代入してその結果を出力する
[1] 156

Data Frame

表・行列形式の中に、数字と文字列が混在しているときには Data Frame (データフレーム)が用いられる。Data frameは関数 data.frameを用いて作成することができる。Data Frame から matrixへの変換は as.matrix を用いる。逆に、Matrix から Data Frameに変換は関数 as.data.frame を用いる。

ソースコード

df <- data.frame(cbind(LETTERS[1:4], 3:0)) # cbindは同じ長さのデータを列単位に結合する関数
colnames(df) <- c("Team","Score") # 列の名前をつける
df # 出力

as.matrix(df) # data.frame df を matrix に変換

実行結果

> df <- data.frame(cbind(LETTERS[1:4], 3:0)) # cbindは同じ長さのデータを列単位に結合する関数
> colnames(df) <- c("Team","Score") # 列の名前をつける
> df # 出力
  Team Score
1    A     3
2    B     2
3    C     1
4    D     0
> 
> as.matrix(df) # data.frame df を matrix に変換
     Team Score
[1,] "A"  "3"  
[2,] "B"  "2"  
[3,] "C"  "1"  
[4,] "D"  "0" 

Array

配列。

ソースコード

ar <- array(1:30, c(2,5,3)) #2 × 5 × 3 の配列に、1 から 30までの値を入れ 作成する。
ar # 出力

実行結果

> ar <- array(1:30, c(2,5,3)) #2 × 5 × 3 の配列に、1 から 30までの値を入れ 作成する。
> ar # 出力
, , 1

     [,1] [,2] [,3] [,4] [,5]
[1,]    1    3    5    7    9
[2,]    2    4    6    8   10

, , 2

     [,1] [,2] [,3] [,4] [,5]
[1,]   11   13   15   17   19
[2,]   12   14   16   18   20

, , 3

     [,1] [,2] [,3] [,4] [,5]
[1,]   21   23   25   27   29
[2,]   22   24   26   28   30

List

List(リスト) は Vector, Matrix, Data Frame, Array, List 等の異なる型のデータをひとつのオブジェクトとして扱うことが可能なオブジェクトである。リストは関数 list を用いて作成する。

ソースコード

l <- list(c(1:8), c("A","B"), matrix(1:12,2,6)) # c(1:8), c("A","B"), matrix(1:12,2,6) を要素に持つlistを作成する
l # 出力

実行結果

l <- list(c(1:8), c("A","B"), matrix(1:12,2,6)) # c(1:8), c("A","B"), matrix(1:12,2,6) を要素に持つlistを作成する
> l # 出力
[[1]]
[1] 1 2 3 4 5 6 7 8

[[2]]
[1] "A" "B"

[[3]]
     [,1] [,2] [,3] [,4] [,5] [,6]
[1,]    1    3    5    7    9   11
[2,]    2    4    6    8   10   12

データ型の確認

関数 class でデータ型をチェックすることができる。

ソースコード

v <- c(105,202,155,91) # vector
class(v) # 型 出力

m <- matrix(1:8,2,4) # matrix
class(m) # 型 出力

df <- data.frame(cbind(LETTERS[1:4], 3:0)) # data.frame
class(df) # 型 出力

a <- array(1:30, c(2,5,3)) # array
class(a) # 型 出力

l <- list(c(1:8), c("A","B"), matrix(1:12,2,6)) # list
class(l) # 型 出力

is.vector(v) # v が vector か check
is.vector(m) # m が vector か check

is.list(v) # v が list か check
is.list(l) # l が list か check

実行結果

> v <- c(105,202,155,91) # vector
> class(v) # 型 出力
[1] "numeric"
> 
> m <- matrix(1:8,2,4) # matrix
> class(m) # 型 出力
[1] "matrix"
> 
> df <- data.frame(cbind(LETTERS[1:4], 3:0)) # data.frame
> class(df) # 型 出力
[1] "data.frame"
> 
> a <- array(1:30, c(2,5,3)) # array
> class(a) # 型 出力
[1] "array"
> 
> l <- list(c(1:8), c("A","B"), matrix(1:12,2,6)) # list
> class(l) # 型 出力
[1] "list"
> 
> is.vector(v) # v が vector か check
[1] TRUE
> is.vector(m) # m が vector か check
[1] FALSE
> 
> is.list(v) # v が list か check
[1] FALSE
> is.list(l) # l が list か check
[1] TRUE


Rの基本関数の一覧は次のサイトを参照:
http://www.math.montana.edu/Rweb/Rhelp/00Index.html

補足:代入表現

Rでは以下の代入が全て等価になっている。

x <- c(10,20,30,40) 
x = c(10,20,30,40) 
assign("x", c(10,20,30,40)) 
c(10,20,30,40) -> x

実際に次のソースコードを実行すると、以下の実行結果になる。

ソースコード

price1 <- c(10,20,30,40) 
price1 

price2 = c(10,20,30,40) 
price2

assign("price3", c(10,20,30,40)) 
price3

c(10,20,30,40) -> price4
price4

実行結果

>price1 <- c(10,20,30,40) 
> price1 
[1] 10 20 30 40
> 
> price2 = c(10,20,30,40) 
> price2
[1] 10 20 30 40
> 
> assign("price3", c(10,20,30,40)) 
> price3
[1] 10 20 30 40
> 
> c(10,20,30,40) -> price4
> price4
[1] 10 20 30 40

文献:

Rによるデータサイエンス データ解析の基礎から最新手法まで

Rによるデータサイエンス データ解析の基礎から最新手法まで

Rによる統計解析

Rによる統計解析

http://www.math.montana.edu/Rweb/Rhelp/00Index.html
R: The R Project for Statistical Computing