「大人の教養・知識・気付き」を伸ばすブログ

一流の大人(ビジネスマン、政治家、リーダー…)として知っておきたい、教養・社会動向を意外なところから取り上げ学ぶことで“気付く力”を伸ばすブログです。目下、データ分析・語学に力点を置いています。今月(2022年10月)からは多忙につき、日々の投稿数を減らします。

MENU

プログラムとしてのRを学ぶ(その06/16)

 \mathrm{R}をプログラムとして見たときに注意・検討すべきところを学んでおきたい、ということで

を読んでいく。

6. ファクタと表

 ファクターは、統計における名義変数という概念に端を発するもので、表形式データに実行する様々な演算などの基礎になる。

6.1 ファクタと水準

 \mathrm{R}のファクタはベクトルに水準と呼ばれる情報が付加されている。

6.2 ファクタに対して用いる一般的関数

6.2.1 tapply()

 ファクタのある値(水準)ごとにその値に対応するベクトル成分に関数を適用するのには、\mathrm{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()

 \mathrm{tapply}とは対照的に\mathrm{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()

 ファクタのある値(水準)ごとにその値に対応するオブジェクトの成分に関数を適用するのには、\mathrm{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 表の扱い

 統計学では分割表のようにが分析対象として現れる。
 \mathrm{R}で分割表を構成するには\mathrm{table}()関数を用いる。

###############
### 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()関数

 \mathrm{aggregate}()関数は、グループ内のそれぞれの変数に対して1回\mathrm{tapply}()関数を呼び出す。

6.4.2 cut()関数

 \mathrm{cut}()関数は、データベクトル\mathrm{x}とベクトル\mathrm{b}で定めた一連のビンを指定することで、\mathrm{x}の各要素が分類されるビン(のベクトル)を返す。

プライバシーポリシー お問い合わせ