×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
# データ生成
dat <- data.frame(s = factor(1:8), a = factor(c(rep(1,4), rep(2, 4))), b1 = rnorm(8), b2 = rnorm(8), b3 = rnorm(8))
dat
library(reshape)
# 縦長にする
dat.l <- melt(dat, id = c("s", "a"))
dat.l
# 横長にする
## 結果はvalue, 反復測定変数はvariableという変数名でないとエラーになる
names(dat.l) # 変数名のチェック
[1] "s" "a" "variable" "value"
cast(dat.l)
PR
# 最頻値
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)
# 等差数列の生成 seq
seq(from=, to=, by=)
# 反復生成 rep
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))
## 因子変数を指定した数だけ複数つくる
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))
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)
# 等差数列の生成 seq
seq(from=, to=, by=)
# 反復生成 rep
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))
## 因子変数を指定した数だけ複数つくる
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))
# 行列、データフレームの先頭、末尾をとりだす
head(dat)
tail(dat)
# 特定の行、列を除いたり、逆に取り出したりする
dat[-2,] # 2行目を除く
dat[,-2] # 2列目を除く
dat[c(1,3,5),] # 1,3,5行を取り出す
dat[,c(1:10)] # 1列目から10列目までを取り出す
# 特定のデータを取り出す
x <- sample(1:5, 100, replace=T)
## 1だけ取り出す
x[x==1]
## 1がいくつかるか数えるには
x==1 # こうするとTRUE/FALSEが返される
sum(x==1) # T/Fは01データとしても扱われるのでsumで調べることができる
which(x==1) # ベクトル内の位置を返す
# subset関数を用いて抽出
## サンプルデータ
dat <- data.frame(id= paste("ps", 1:20, sep=""), sex=sample(c("m", "f"), 20, replace=T), age=sample(20:70, 20, replace=T))
## 男性だけ取り出す
subset(dat, sex=="m")
## 30以上70以下だけ取り出す
subset(dat, age>=30 & age<=70)
## 30以上70以下の男性だけ取り出す
subset(dat, sex=="m" & (age>=30 & age<=70))
## 30以上70以下の男性のidだけ取り出す。select引数を使う
subset(dat, sex=="m" & (age>=30 & age<=70), select=id)
## 因子変数と数値変数が混在しているデータフレームで、因子だけのと数値だけのデータフレームに分ける
# データの準備
f1 <- sample(letters[1:5], 20, replace=T)
f2 <- ordered(sample(letters[11:15], 20, replace=T))
f2["Levels"] # これは順序変数にしてみよう
n1 <- sample(500:1000, 20, replace=T)
n2 <- sample(rnorm(100), 20, replace=T)
f3 <- sample(letters[21:25], 20, replace=T)
dat <- data.frame(f1, f2, n1, n2, f3)
summary(dat)
sapply(dat, class)
# 因子変数はdatfへ、それ以外 (数値) はdatiへ
fcol <- grep("factor", sapply(dat, class))
datf <- dat[,c(fcol)]
dati <- dat[,-c(fcol)]
datf
dati
# 重複するデータを除く
## サンプルデータ
dat <- data.frame(
id=gl(5, 10, labels=c("s1", "s2", "s3", "s4", "s5")),
sex=rep(c("f", "f", "m", "m", "f"), each=10),
age=rep(c(18:22), each=10)
)
aggregate(dat[2:3], list(dat[,1]), function(x) x[1])
# きっともっといいやり方があるだろう
# データの並べ替え
## ベクトルの処理
x <- c(1,3,5,6,4,2)
rev(x) # 逆順に並べ替え
sort(x) # 小さい順に並べ替え
sort(x, decreasing=T) # 大きい順に並べ替え。sort(x, T) でも可
order(x) # 小さい順の添え字
x[order(x)] # sort(x) と同じ
## サンプルデータ
dat <- data.frame(v1=1:12, v2=rep(c(4,2,9), each=4), v3=rep((rep(c(2,1), each=2)), 3))
dat
# 変数v2で並べ替え
dat[order(dat$v2),]
# v2とv3で並べ替え
dat[order(dat$v2, dat$v3),]
# v2は降順、v3は昇順
dat[order(-dat$v2, dat$v3),]
## ソートの例2。データフレームの並べ替え処理
## サンプルデータ
a <- paste("a", sample(1:10,10), sep="")
b <- paste("b", sample(1:10,10), sep="")
dat <- data.frame(round(matrix(rnorm(100), nr=10),2))
colnames(dat) <- a
rownames(dat) <- b
dat
## 列名で並べ替える
dat[,order(colnames(dat))]
## 行名で並べ替える
dat[order(rownames(dat)),]
## 列1で並べ替える
dat[order(dat[,1]),] # カンマは後ろにつく。列の数値で行を並べ替えるので
## 行1で並べ替える
dat[,order(dat[1,])] # カンマは前につき、dat[1,]につく。行の数値で列を並べ替えるので
# データのマージ
## サンプルデータ
dat1 <- data.frame(id=paste("ps", 1:10, sep=""), v1=rnorm(10), v2=gl(2, 5, label=c("ga", "gb")), v3=sample(1:5, replace=T))
dat2 <- data.frame(id=paste("ps", 101:110, sep=""), v2=gl(2, 5, label=c("gb", "gc")), v3=sample(1:5, replace=T)) # id重複なし
dat3 <- data.frame(id=paste("ps", 1:6, sep=""), v5=rnorm(6)) # id重複
# 縦にくっつける
merge(dat1, dat2, all=T)
merge(dat1, dat3, all=T)
# 横にくっつける
cbind(dat1, dat2)
data.frame(dat1, dat2) # 自動で重複する変数名を変えてくれる
# 計算関数
## その他
# 割り算の余りをとる
x %% y
# 割り算の商をとる
x %/% y
# 角度を与えてサインコサインタンジェントを得るにはaspaceパッケージの関数を使う
library(aspace)
sin_d()
cos_d
tan_d()
# 統計関数
x <- trunc(rnorm(1000, mean=100, sd=10))
mean(x) # 平均
sd(x) # 不偏標準偏差
median(x) # 中央値
quantile(x) # クォンタイル値
range(x) # 範囲
sum(x) # 合計
min(x) # 最小値
max(x) # 最大値
scale(x) # 変数の標準化
scale(x, center=T, scale=F) # 変数の中心化
# 調和平均
library(psych)
harmonic.mean(ベクトル)
# 確率分布
確率分布関数の覚書
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の曲線を描く
abs() | 絶対値 |
ceiling() | 切り上げ |
floor() | 切り下げ |
trunc | 整数部分を抜き出す |
round | 四捨五入 |
sin, cos, tan | サイン、コサイン、タンジェント |
log | 自然対数 |
log10 | 常用対数 |
exp | 指数 |
## その他
# 割り算の余りをとる
x %% y
# 割り算の商をとる
x %/% y
# 角度を与えてサインコサインタンジェントを得るにはaspaceパッケージの関数を使う
library(aspace)
sin_d()
cos_d
tan_d()
# 文字列操作
substr(x, start= , stop=) | 文字列の抽出 |
grep(pattern=, x, ignore.case=, fixed=) | オブジェクト内の文字列を検索する。patternに一致するxの位置を返す。 |
sub(pattern=, replacement=, x, ignore.case=, fixed=) | 文字列内の特定の文字のの置換 |
strsplit(x, split=) | 文字列の分割 |
paste(..., sep=) | 文字列の結合。# paste("Ps", 1:10, sep="") |
toupper | 大文字にする |
tolower | 小文字にする |
abbreviate() | 短くする。# abbreviate(names(iris)) |
# 統計関数
x <- trunc(rnorm(1000, mean=100, sd=10))
mean(x) # 平均
sd(x) # 不偏標準偏差
median(x) # 中央値
quantile(x) # クォンタイル値
range(x) # 範囲
sum(x) # 合計
min(x) # 最小値
max(x) # 最大値
scale(x) # 変数の標準化
scale(x, center=T, scale=F) # 変数の中心化
# 調和平均
library(psych)
harmonic.mean(ベクトル)
# 確率分布
確率分布関数の覚書
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の曲線を描く