をプログラムとして見たときに注意・検討すべきところを学んでおきたい、ということで
を読んでいく。
前回
6. ファクターと表
ファクターは、統計における名義変数という概念に端を発するもので、表形式データに実行する様々な演算などの基礎になる。
6.1 ファクタと水準
のファクタはベクトルに水準と呼ばれる情報が付加されている。
6.2 ファクタに対して用いる一般的関数
6.2.1 tapply()
ファクタのある値(水準)ごとにその値に対応するベクトル成分に関数を適用するのには、()関数を用いる。
# tapply:ファクタのある値ごとにその値に対応するベクトル成分に関数を適用する ages <- c(25,26,55,37,21,42) affils <- c("R","D","D","R","U","D") tapply(ages,affils,mean) d <- data.frame(list(gender = c("M","M","F","M","F","F"), age = c(47,59,21,32,33,24), income = c(55000,88000,32450,76500,123000,45650))) d$over25 <- ifelse(d$age>25,1,0) tapply(d$income,list(d$gender,d$over25),mean) # 複数のファクターに対して分類してmeanを適用
6.2.2 split()
とは対照的には最初の段階で終了させ、グループを作成する。すなわちファクタの値ごとにグループを作成し、分類したグループを成分に持つリストを返す。
######################### ### split()のサンプル ### ######################### d <- data.frame(gender = c("M","M","F","M","F","F"), age = c(47,59,21,32,33,24), income = c(55000,88000,32450,76500,123000,44650), over25 = c(1,1,0,1,1,0)) split(d$income,list(d$gender,d$over25))
6.2.3 by()
ファクタのある値(水準)ごとにその値に対応するオブジェクトの成分に関数を適用するのには、()関数を用いる。
###################### ### by()のサンプル ### ###################### n <- 20 x1 <- rnorm(n = n,mean = 0,sd = 1) x2 <- rnorm(n = n,mean = 0,sd = 1) d1 <- data.frame(x = x1, y = 0.8 * x1 + rnorm(n = n, mean = 0,sd = 0.1), factor = 0) d2 <- data.frame(x = x2, y = 0.2 -1.2 * x2 + rnorm(n = n, mean = 0,sd = 0.3), factor = 1) d0 <- rbind(d1,d2) # データd0に対してfactorの値ごとでデータを分割し、各分割データに回帰分析(lm())を適用する by(d0,d0$factor,function(m){lm(m[,2]~m[,1])})
6.3 表の扱い
統計学では分割表のように表が分析対象として現れる。
で分割表を構成するには関数を用いる。
############### ### table() ### ############### fl <- list(c(5,12,13,12,13,5,13), c("a","bc","a","a","bc","a","a")) table(fl) # table()は一次元カウントも作成できる table(c(5,12,13,12,13,5,13))
行列に対する操作は、表に対しても適用できる。
6.4 ファクタ/表関連のその他の関数
6.4.1 aggregate()関数
関数は、グループ内のそれぞれの変数に対して1回関数を呼び出す。
6.4.2 cut()関数
関数は、データベクトルとベクトルで定めた一連のビンを指定することで、の各要素が分類されるビン(のベクトル)を返す。