指標変数のマトリックスを作成したいと思います。私の最初の考えは、ここでも提案されていたmodel.matrixを使用することでした:因子水準ごとにR因子を1/0指標変数のコレクションに自動的に拡張する
ただし、因子にレベルが 1 つしかない場合、model.matrix は機能しないようです。
以下は、因子「地域」に 3 つのレベルを持つデータ セットの例です。
dat = read.table(text = "
reg1 reg2 reg3
1 0 0
1 0 0
1 0 0
1 0 0
1 0 0
1 0 0
0 1 0
0 1 0
0 1 0
0 0 1
0 0 1
0 0 1
0 0 1
", sep = "", header = TRUE)
# model.matrix works if there are multiple regions:
region <- c(1,1,1,1,1,1,2,2,2,3,3,3,3)
df.region <- as.data.frame(region)
df.region$region <- as.factor(df.region$region)
my.matrix <- as.data.frame(model.matrix(~ -1 + df.region$region, df.region))
my.matrix
# The following for-loop works even if there is only one level to the factor
# (one region):
# region <- c(1,1,1,1,1,1,1,1,1,1,1,1,1)
my.matrix <- matrix(0, nrow=length(region), ncol=length(unique(region)))
for(i in 1:length(region)) {my.matrix[i,region[i]]=1}
my.matrix
for ループは効果的で、十分に単純に見えます。ただし、ループを含まない解決策を考え出すのに苦労しています。上記のループを使用できますが、それらから離れようと懸命に努力しています。より良い方法はありますか?