1

R ではmodel.matrix()、たとえば次のような設計行列を作成するために使用できます。

grp.ids = as.factor(c(rep(1,8), rep(2,4), rep(3,2)))
x = model.matrix(~grp.ids)

計画行列 を与えるx

   (Intercept) grp.ids2 grp.ids3
1            1        0        0
2            1        0        0
3            1        0        0
4            1        0        0
5            1        0        0
6            1        0        0
7            1        0        0
8            1        0        0
9            1        1        0
10           1        1        0
11           1        1        0
12           1        1        0
13           1        0        1
14           1        0        1
attr(,"assign")
[1] 0 1 1
attr(,"contrasts")
attr(,"contrasts")$grp.ids
[1] "contr.treatment"

ただし、今、上記のような計画行列が与えられ、何らかの方法で操作してx「グループ化ベクトル」を取得したいと考えています。どうやってやるの?ありがとう!grp.idsx

4

1 に答える 1

3

ID の元の値が何であったかを知ることができないため、最初に作成されたとおりに grp.id を復元できるとは思いません。ただし、同じ model.maxtrix になるベクトルを作成できます。

factor(apply(x, 1, paste, collapse = "."), labels = seq(ncol(x)))

ただし、この特定のケースでは、これはかなり近くなります。


前のもののラベルは、(目的の 1、2、3 ではなく) 1、3、2 の順序を示します。これは、「1.0.0」、「1.1.0」、「1.0.1」を取得するためです。実際の出力をアルファベット順にソートすると、1、3、2 の順序になります。入力文字列を逆にして「0.0.1」、「0.1.1」、「1.0.1」とすると、目的の順序になります。以下は動作するはずです

factor(apply(x, 1, function(x){paste(rev(x), collapse = ".")}), labels = seq(ncol(x)))
于 2012-11-17T22:07:33.610 に答える