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
文献:
- 作者: 金明哲
- 出版社/メーカー: 森北出版
- 発売日: 2007/10/01
- メディア: 単行本(ソフトカバー)
- 購入: 36人 クリック: 694回
- この商品を含むブログ (64件) を見る
- 作者: 青木繁伸
- 出版社/メーカー: オーム社
- 発売日: 2009/04/01
- メディア: 単行本
- 購入: 10人 クリック: 123回
- この商品を含むブログ (34件) を見る
R: The R Project for Statistical Computing