データ・マニピュレーション

Last modified: Oct 19, 2015


1 関数説明


1.1 colnames

 データフレームや行列に,列名をつける。

(a <- matrix(1:12, 3, 4)) 
##      [,1] [,2] [,3] [,4] 
## [1,]    1    4    7   10 
## [2,]    2    5    8   11 
## [3,]    3    6    9   12 
colnames(a) <- c("東京", "京都", "名古屋", "広島") 
a 
##      東京 京都 名古屋 広島 
## [1,]    1    4      7   10 
## [2,]    2    5      8   11 
## [3,]    3    6      9   12 

 データフレームや行列の,列名を取り出す。

colnames(iris) 
## [1] "Sepal.Length" "Sepal.Width"  "Petal.Length" "Petal.Width"  "Species" 

1.2 nrow

 データフレームや行列の行数を取り出す。

nrow(iris) 
## [1] 150 

1.3 class

 オブジェクトのクラスを調べる。

class(iris) 
## [1] "data.frame" 
class(iris[,1]) 
## [1] "numeric" 
class(iris[,5]) 
## [1] "factor" 
a <- matrix(1:12, 3, 4) 
class(a) 
## [1] "matrix" 
class(a[1,]) 
## [1] "integer" 
class(1L) 
## [1] "integer" 
class(1) 
## [1] "numeric" 

1.4 as.numeric

 文字列を数値にする。

as.numeric("123") 
## [1] 123 
as.numeric("1.234") 
## [1] 1.234 

 factor 変数を数値にする。

(fac <- factor(c("male", "female", "u.k."))) 
## [1] male   female u.k.   
## Levels: female male u.k. 
as.numeric(fac) 
## [1] 2 1 3 

1.5 as.character

 数値を文字列にする。

as.character(123) 
## [1] "123" 
as.character(1.234) 
## [1] "1.234" 

 factor 変数を文字列にする。

(fac <- factor(c("male", "female", "u.k."))) 
## [1] male   female u.k.   
## Levels: female male u.k. 
as.character(fac) 
## [1] "male"   "female" "u.k." 

1.6 unique

 データフレーム(行列)の重複する行を取り除く。

( d <- data.frame(a=c(2, 2, 5, 4, 1, 2, 2), 
                  b=c("f", "r", "o", "u", "p", "r", "z"), 
                  c=c(2, 4, 3, 5, 2, 4, 4)) ) 
##   a b c 
## 1 2 f 2 
## 2 2 r 4 
## 3 5 o 3 
## 4 4 u 5 
## 5 1 p 2 
## 6 2 r 4 
## 7 2 z 4 
( u <- unique(d) ) 
##   a b c 
## 1 2 f 2 
## 2 2 r 4 
## 3 5 o 3 
## 4 4 u 5 
## 5 1 p 2 
## 7 2 z 4 

 ベクトルの重複する要素を取り除く。

x <- c( 2, 4, 2, 5, 6, 7, 3, 5) 
unique(x) 
## [1] 2 4 5 6 7 3 

1.7 grepl

grepl(pattern, x)

grepl 関数は,文字列 x の中にパターン pattern があるかどうか調べる。

grepl("cde", "abcdefg") 
## [1] TRUE 
grepl("ceg", "abcdefg") 
## [1] FALSE 

パターンは正規表現で指定することができる。


1.7.1 ?

 直前の表現が 0 個または 1 個あることを示す。colou?r は color, colour の両方にマッチする。

grepl("colou?r", c("color", "colour", "colo5r")) 
## [1]  TRUE  TRUE FALSE 

1.7.2 *

 直前の表現が0個以上あることを示す。gre*ngrn, gren, greeeeen などにマッチする。

grepl("gre*n", c("grn", "gren", "greeeeen")) 
## [1] TRUE TRUE TRUE 

1.7.3 +

 直前の表現が1個以上あることを示す。gre+ngren, green, greeeeen などにマッチするが grn にはマッチしない。

grepl("gre+n", c("grn", "gren", "greeeeen")) 
## [1] FALSE  TRUE  TRUE 

1.7.4 {\(n\)}

 直前の表現がちょうど \(n\) 回繰り返される部分にマッチする。

grepl("gre{3}n", c("green", "greeen", "greeeen")) 
## [1] FALSE  TRUE FALSE 

1.7.5 {\(n\),}

 直前の表現が \(n\) 回以上繰り返される部分にマッチする。

grepl("gre{3,}n", c("green", "greeen", "greeeen")) 
## [1] FALSE  TRUE  TRUE 

1.7.6 {\(n\),\(m\)}

 直前の表現の \(n\) 回以上,\(m\) 回以下の繰り返しにマッチする。gre{3,5}ngreeen, greeeen, greeeeen にマッチする。

grepl("gre{3,5}n", c("green", "greeen", "greeeen", "greeeeen", "greeeeeen")) 
## [1] FALSE  TRUE  TRUE  TRUE FALSE 

1.7.7 .

 任意の文字にマッチする。.anbank, canfan などにマッチする。

grepl(".an", c("bank", "tangent")) 
## [1] TRUE TRUE 

1.7.8 \

 正規表現で特別な意味を持つ記号を,本来の記号として使う(エスケープする)ためにその記号の前に付ける。たとえば,\? など。

grepl("3.4", c("123.45", "123a45")) 
## [1] TRUE TRUE 
# 3\.4 ではだめ。 \ 自身もエスケープしなければならない 
grepl("3\\.4", c("123.45", "123a45")) 
## [1]  TRUE FALSE 

1.7.9 [ ]

 括弧内に含まれる1文字にマッチする。[awx]awx にマッチする。[a-z] は英小文字すべて,[0-9] は全ての数字にマッチする。

grepl("[awx]", c("game", "walk", "skip")) 
## [1]  TRUE  TRUE FALSE 
grepl("[a-z0-9]", c("ajhu", "789", "@#$%")) 
## [1]  TRUE  TRUE FALSE 

1.7.10 [^ ]

 括弧内に含まれない1文字にマッチする。[^awx]awx 以外の 1 文字にマッチする。

grepl("[^awx]", c("awxx", "walk", "1234")) 
## [1] FALSE  TRUE  TRUE 

1.7.11 a|b

 a または b にマッチする。

grepl("abc|def", c("hjabciu", "tydef98", "78khu")) 
## [1]  TRUE  TRUE FALSE 

1.7.12 ( )

 グループ化する。

grepl("876(abc|def)99", c("876abc99", "876def99", "564abc34")) 
## [1]  TRUE  TRUE FALSE 

1.7.13 ^

 先頭にマッチする。^{}abc は先頭にある abc にマッチする。

grepl("^abc", c("abcde", "was abcx o")) 
## [1]  TRUE FALSE 

1.7.14 $

 末尾にマッチする。xyz$ は末尾の xyz にマッチする。

grepl("xyz$", c("xyzui", "ikj uvwxyz")) 
## [1] FALSE  TRUE