No.22147 R 分割表から元データを再現  【明石】 2016/09/22(Thu) 19:56

青木先生,
いつもお世話になり,ありがとうございます,明石と申します。

Rプログラムについて,ご教示いただきたいことが出てきました。

何卒どうぞ,よろしくお願いいたします。

−−−

青木先生の以下のサイトについて,ご質問がございます。

 http://aoki2.si.gunma-u.ac.jp/R/tenkai.html
 分割表から元データを再現 

使用例として,以下のように記載されています。
f <- matrix(c(2,3,1,4,3,5,4,3,2,1,2,4), nrow=3, byrow=TRUE)

result <- tenkai(f) # 結果はリストで返される
x <- result$x
y <- result$y

x
[1] 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3

y
[1] 1 1 2 2 2 3 4 4 4 4 1 1 1 2 2 2 2 2 3 3 3 3 4 4 4 1 1 2 3 3 4 4 4 4
この例題に,行名と列名を,以下のように与えたとします。
rownames(f) <- c("r1", "r2", "r3")
colnames(f) <- c("c1", "c2", "c3", "c4")
上記のx,yの値を,数字ではなく,行名と列名で返したいと思います。

そのRプログラムをご教示いただければ,大変に助かります。

どうぞ,よろしくお願いいたします。

No.22148 Re: R 分割表から元データを再現  【青木繁伸】 2016/09/22(Thu) 21:15

せっかく与えた行名と列名を使うなら,
rownames(f)[x]
colnames(f)[y]
ただ,tenkai が何をやっているのかを見て,単に r, c で始まる名前でよいならば,行名,列名を与えてやる必要はなくて,
paste("r", rep(row(f), f), sep="")
paste("c", rep(col(f), f), sep="")
で十分。これを関数にしてやると面倒くささがなくなる。
paste0 が使えるならば,以下のように。
paste0("r", rep(row(f), f))
paste0("c", rep(col(f), f))

No.22149 【御礼】 Re: R 分割表から元データを再現  【明石】 2016/09/23(Fri) 08:45

青木先生,
いつもお世話になり,ありがとうございます,明石と申します。

早々にご教示いただき,誠にありがとうございました。
今回も助けていただきました。

私も自分で,以下のような方法を考えてみました(途中で断念)。
・x,y からデータフレームを作成し,
・x,y が返す数字を,因子の水準番号と見なして,
 因子の水準に対応する名前(ここでが,行と列の名前)を与えて,
・最後に,数値を文字列表示に変換する

ご教示いただき,誠にありがとうございました。
心から御礼を申し上げます。

● 「統計学関連なんでもあり」の過去ログ--- 048 の目次へジャンプ
● 「統計学関連なんでもあり」の目次へジャンプ
● 直前のページへ戻る