組み込み関数
データ操作によく使う関数。これもそのうちまとめる。
数値操作関数
Function | Description |
abs(x) | 絶対値 abs(-100) |
sqrt(x) | 平方根 sqrt(100) |
ceiling(x) | 切り上げ ceiling(3.475) is 4 |
floor(x) | 切り捨て floor(3.475) is 3 |
trunc(x) | 整数部だけ取り出し trunc(5.99) is 5 |
round(x, digits=n) | IEEE式の四捨五入 round(3.475, digits=2) is 3.48 |
signif(x, digits=n) | xを有効数字n桁で表示 signif(3.475, digits=2) is 3.5 |
cos(x), sin(x), tan(x) | サイン、コサイン、タンジェント 角度 (ラジアン) を求めるには acos(x), cosh(x), acosh(x)。三角関数 # 角度を与えてサインコサインタンジェントを得るにはaspaceパッケージの関数を使う library(aspace) sin_d(), cos_d, tan_d() |
log(x) | 自然対数。ExcelではLOG()が常用対数。 log(1000) |
log10(x) | 常用対数 log10(1000) |
exp(x) | 指数 log(1000); exp(log(1000)) |
文字列操作関数
Function | Description |
substr(x, start=n1, stop=n2) | 文字列の抽出と置換 x <- "abcdef" substr(x, 2, 4) is "bcd" substr(x, 2, 4) <- "22222" is "a222ef" |
grep(pattern, x, ignore.case=FALSE, fixed=FALSE) | オブジェクト内の文字列を検索し、patternに一致するxの位置を返す。fixed =FALSE とすると正規表現で検索する。 fixed=TRUE thenの場合、文字列として検索する。一致した文字列の添え字を返す。. grep("A", c("b","A","c"), fixed=TRUE) returns 2 応用例 |
sub(pattern,replacement,x, ignore.case =FALSE, fixed=FALSE) | 文字列を置換する。 a <- "s000" sub("s", "X", a) 文字列を除去することもできる sub("s", "", a) |
gsub(pattern,replacement,x, ignore.case =FALSE, fixed=FALSE) | 文字列を置換する。subと違って複数を一括置換できる。 a <- "s00s0" sub("s", "X", a) # 最初の文字しか置換されない。 gsub("s", "X", a) |
strsplit(x,split) | 文字列を分割する。区切りはsplitで指定する。。結果がリストとして返されることに注意。 strsplit("abc", "") strsplit("abc", "b") # リストとして返さず、ベクトルとして返す。以下2つは同じ結果 strsplit("abc", "_")[[1]] unlist(strsplit("abc", "_")) |
paste(..., sep="") | 文字列を結合する。sep で区切りを指定する。 paste("x",1:3,sep="") paste("x",1:3,sep="M") paste("Today is", date()) # ベクトルの要素を結合する。collapseオプションを使う。 nms <- names(iris) # irisデータの変数名 paste(nms, collapse=",") # コンマ区切り paste(nms, collapse=" ") # スペース区切り |
toupper(x) | 大文字にする toupper("abc") |
tolower(x) | 小文字にする tolower("ABC") |
abbreviate(x) | Rが"適当に"文字列を短くする。 names(iris) abbreviate(names(iris)) |
nchar(x) | 1つの要素の文字数を数える。 nchar("s000") |
cat(x) | 文字列を出力 cat(letters, sep=",") # 小文字をコンマ区切りで出力 cat(letters, sep="\n") # 小文字を改行してで出力 |
正規表現とは文字列の特徴をパターン化し、特別の記号で表現したもの。検索や置換をパターンで行える。たとえば、
2011/04/05
-> "数字スラッシュ数字スラッシュ数字" というパターン
-> 正規表現であらわすと「\d+/\d+/\d+」となる。
という説明がわかりやすかった。
Rjpwiki: Rにおける正規表現
他正規表現リンク
Rjpwiki: Rにおける正規表現
確率統計の関数
確率分布に関連した関数。乱数生成で set.seed(1234) (他の数字でもよい) とすると同じ乱数を生成できる。Rjpwikiの記事のほうがわかりやすいのはいうまでもない。Rにおける確率分布
Function | Description |
dnorm(x) | 平均0、標準偏差1 (m=0, sd=1) の正規分布密度関数。 # 正規曲線のプロット x <- pretty(c(-3,3), 30) y <- dnorm(x) plot(x, y, type='l', xlab="Normal Deviate", ylab="Density", yaxs="i") |
pnorm(q) | クォンタイル値に対する累積確率。よく片側で0.975とかになるアレ。クォンタイル値から下 (左) の確率を出力。 pnorm(1.96) is 0.975 |
qnorm(p) | 確率値 (パーセンタイル) 正規分布のクォンタイル値。 qnorm(.975) is 1.959964 |
rnorm(n, m=0,sd=1) | 平均と標準偏差を指定し、正規分布による乱数を生成する。 x <- rnorm(50, m=50, sd=10) # 平均50、標準偏差10の乱数を50個生成 |
dbinom(x, size, prob) pbinom(q,size,prob) qbinom(p,size,prob) rbinom(n, size, prob) |
二項分布関数。sizeはサンプルサイズ、probは確率を指定。 コインを10回投げて (size=10) 、表が出る (prob=0.5) 回数 (1回も表が出ない、1回表が出る、2回出る...5回出る: x=1:5) を求める。 dbinom(0:5, 10, .5) コインを10回投げて "少なくとも" 5回は表が出る確率 pbinom(5, 10, .5) sum(dbinom(0:5, 10, .5)) # これも同じ |
dpois(x,lamda) ppois(q,lamda) qpois(p,lamda) rpois(n,lamda) |
ポアソン分布。 poisson distribution with m=std=lamda #probability of 0,1, or 2 events with lamda=4 dpois(0:2, 4) # probability of at least 3 events with lamda=4 1- ppois(2,4) |
dunif(x, min=0, max=1) punif(q, min=0, max=1) qunif(p, min=0, max=1) runif(n, min=0, max=1) |
一様分布。 runif(10) |
覚書
- d... distribution。分布関数曲線の数式。確率密度関数のこと
- p... percentile 。特定のポイントでの面積 (積分) 。よく斜線が引いてあるアレ
- q... quantile。ある確率密度のときの横軸 (標準得点の値) 。よく1.96とか使われるアレ
- r... random。特定の分布に基づいて乱数を発生させる (例えば正規分布に基づく乱数だと、平均0、標準偏差1になる)
正規分布曲線
x <- seq(-4, 4, 0.01) # 最小値-4, 最大値4、0.01刻みのベクトル
curve(dnorm(x, 0, 1), -4, 4) # ベクトルxについて、平均0、標準偏差1の曲線を描く
他の統計関数
na.rmで欠損値の扱いを指定する。結果はベクトルやデータフレーム、あるいはスカラで返される。R-tipsの59. 基本統計量の算出のほうがわかりやすい。
Function | Description |
mean(x, trim=0, na.rm=FALSE) |
算術平均 # trim=0.5でデータの上下5%をカットしたトリム平均を算出する。 mx <- mean(x,trim=.05,na.rm=TRUE) |
sd(x) | 不偏標準偏差。不偏分散はvar(x) 、中央絶対偏差 (median absolute deviation) はmad(x) |
median(x) | 中央値 |
quantile(x,probs) | 分位数。データを並べて、その数を1対3とか、1対1に区切る値のこと。1対1に区切る値は中央値に同じ。 x <- c(0.7,-1.6,-0.2,-1.2,-0.1,3.4,3.7,0.8,0.0,2.0) quantile(x) |
range(x) | 範囲 |
sum(x) | 合計 |
diff(x, lag=1) | ラグつき階差 |
min(x) | 最小値 |
max(x) | 最大値 |
scale(x, center=TRUE, scale=TRUE) | 中心化 or 標準化。center=T, scale=Fで標準化。 |
他の便利な関数
Function | Description |
seq(from , to, by) | 等差数列の生成 seq(1,10,2) |
rep(x,ntimes) | 要素の反復 rep(1:3, times = 3) # 1,2,3を3回繰り返す。rep(1:3, 3) も同じ rep(1:3, each = 3) # それぞれを3回くりかえす ## 繰り返しは要素ごとに指定もできる rep(1:3, times = c(3, 2, 5)) |
cut(x, n) | 連続変数をn個の水準をもった因子変数にする。 cut(1:10,5) # 1以上5以下と5より大きく10以下の2水準。水準名はわかりづらい。 |
他の便利な関数2
# 最頻値
# 例示用ベクトル
xn <- sample(1:100, 1000, replace=T)
xf <- factor(sample(letters[1:5], 1000, replace=T))
# 数値変数の場合
x <- xn
hist(x, plot=F, right=F)$breaks[order(hist(x, plot=F, right=F)$counts, decreasing=T)][1] # 最頻値出力
# 確認用
hist(xn, plot=F)
# 因子変数の場合
x <- xf
names(table(x))[order(as.vector(table(x)), decreasing=T)][1] # 最頻値出力
# 確認用
table(xf)
## 因子変数を指定した数だけ複数つくる
gl(n=3, k=20, labels=c("control", "treatmentA", "treatmentB")) # ordered=Tで順序尺度に
# ランダムサンプリング sample
sample(x=ベクトル, size=総数, replace=F:同じ要素が選ばれても良いか, prob=NULL:確率ベクトル
## 5件法のデータを100個生成する
sample(x=5, size=100, replace=T)
## prob引数。確率ベクトルとして3が半分とかのデータにする。デフォルトは一様
p <- c(0.1, 0.1, 0.5, 0.1, 0.2)
table(sample(x=5, size=100, replace=T, prob=p)) # tableで集計
## 正規分布っぽい乱数生成
# msmパッケージのptnorm関数を使用して上限と下限を設定した正規分布をつくり、それを5等分して各確率密度を求め, pr.vに入れる
pr.v <- vector("numeric", 5)
library(msm)
for (i in 1:5) {
pr.v[i] <- ptnorm(q=i+1, mean=3.5, sd=1, lower=1, upper=6) - ptnorm(q=i, mean=3.5, sd=1, lower=1, upper=6)
}
pr.v
## pr.vに従って1-5までの乱数を生成する
x <- sample(1:5, 10000, replace=T, prob=pr.v)
table(x)
# 組み合わせ関数 combn, choose
5水準の要因で、2水準ごとの組み合わせ
x <- gl(5, 20) # 各サンプルサイズは20とする。特に意味はない
x.lvl <- levels(x)
combn(x.lvl, 2)
# 何通りあるか
x.nm <- nlevels(x)
choose(x.nm, 2)
# 複数の因子の交互作用的な組み合わせ?
y <- gl(3, 20, labels=c("a", "b", "c"))
interaction(x, y)
## 組み合わせの種類
levels(interaction(x, y))
# ファイル・ディレクトリを R から操作する低水準インタフェイス関数群
dir(...) # ディレクトリ内のファイル名を列挙
file.create(...) # ファイルを新規作成
file.exists(...) # ファイルが存在するかどうかチェック
file.remove(...) # ファイルを削除
file.rename(from, to) # ファイル名を変更
file.append(file1, file2) # ファイルを合併
file.copy(from, to, overwrite = FALSE) # ファイルをコピー
file.symlink(from, to) # シンボリックリンク
dir.create(path, showWarnings = TRUE) # 新規ディレクトリを作成
# ベクトル、オブジェクトの一致判断
x<-1:10
y<-x # 同じもの
y10<-c(1:9,100)#最後だけ違う
y01<-c(100,2:10)#最初だけ違う
# 基本的に等号演算子で確認できる
x==y
x==y10
x==y01
## 同じなのはいくつかカウント
sum(x==y)
sum(x==y10)
#とりあえず同じかどうか調べる
identical(x,y10)#ベクトルだけではなくオブジェクトもわかる
#yの中にxのどの要素があるか調べる。yの中にあるxの要素を返し、そうでないものはNA。excelでいうとcountifみたいなものか
match(x,y10)
#countif的にマッチするものの数を数える。回答と正答を照合して正答の個数を数えたりするときに使う。
# x=回答、y10=正答 (解答) とする。
sum(complete.cases(match(x,y10)))
# どこが同じ調べる。要素の位置 (添え字) を返す
xx <- c(11:20, 1:10)
yy <- c(11:20, 101:110)
which(xx==yy) # 要素の1番目から10番目まで同じ
上記の関数は多くの場合ベクトルや行列に適用可能。
RプログラミングTips大全