No.21771 【R】apply関数の適用  【赤羽】 2015/09/10(Thu) 22:34

青木先生,
赤羽と申します,いつもご教示を頂戴し,誠にありがとうございます。
改めて御礼を申し上げます。

ループを回す処理を回避するための,apply関数の適用について,
ご教示をいただければ,大変に助かります。

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

------
添付の画像(単純な例示)を用いて,ご説明をいたします。

行列Mは,0 のみからなる大規模行列です(m行 * n列)。

ベクトルVは,行列Mの行方向と同じサイズをもちます(m行 * 1列)。
ベクトルVの要素は,行列Mの列方向のサイズn以下の整数値(1 <= V[i] <= n)です。

ベクトルVの要素V[i]を,行列Mの列方向の位置として,
行列Mの i行 V[i]列の要素に,1 をセットしたいと思います。

ループを回せば簡単にできますが,
行列Mが大規模であることから,
ループを回す処理を回避するための,apply関数の適用を試みていますが,
誠に恥ずかしいのですが,できないでおります。

ご教示をいただければ,大変に助かります。
どうぞ,よろしくお願いいたします。


No.21772 Re: 【R】apply関数の適用  【荒】 2015/09/11(Fri) 07:20

dat <- c(5,6,7,8,7,1,4,3,7,3)
sapply(seq(max(dat)), function(i) ifelse(dat == i, 1, 0))

でどうでしょうか?

No.21773 Re: 【R】apply関数の適用  【青木繁伸】 2015/09/11(Fri) 08:58

基本的には,代入だけでできます
m <- 10
n <- 11
M <- matrix(0, m, n)
V <- c(5:8, 7, 1, 4, 3, 7, 3) # ここまで準備

M[cbind(1:m, V)] <- 1

No.21777 【御礼】Re: 【R】apply関数の適用  【赤羽】 2015/09/11(Fri) 22:03

青木先生,荒様;
赤羽と申します,有難いご教示を頂戴し,大変に助かりました。
大変に良い勉強となりました。

No.21779 Re: 【R】apply関数の適用  【荒】 2015/09/12(Sat) 12:49

青木先生

自分でもカテゴリカル変数をダミー変数に変換する関数を作成したのですが,
http://arat.xyz/wordpress/?p=160
行数は増えますがsapplyを使用するよりもコードが分かりやすくなりました。
参考にさせて頂きました。
ありがとうございました。

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