0

入力ベクトルを受け取り、対応するバイナリ行列を返すネイティブR関数はありますか?行列には、入力ベクトルの一意の値と同じ数の列がありますか?

たとえば、が与えられた場合x <- 1:3、次の行列を返します。

     [,1] [,2] [,3]
[1,]    1    0    0
[2,]    0    1    0
[3,]    0    0    1

関数contrastsは近づいていますが、返されたn-1列を回避できないようです。

> contrasts(as.factor(x))
  2 3
1 0 0
2 1 0
3 0 1
4

2 に答える 2

5

実際にcontrastsは、あなたが望むものです。

contrasts(as.factor(1:3), contrasts=FALSE)

  1 2 3
1 1 0 0
2 0 1 0
3 0 0 1
于 2012-08-15T14:15:11.267 に答える
5

model.matrix()ここで役立つかもしれませんが、インターセプトを抑制する必要があります。

> model.matrix(~ factor(1:3) - 1)
  factor(1:3)1 factor(1:3)2 factor(1:3)3
1            1            0            0
2            0            1            0
3            0            0            1
attr(,"assign")
[1] 1 1 1
attr(,"contrasts")
attr(,"contrasts")$`factor(1:3)`
[1] "contr.treatment"

もう少し複雑なもの:

> set.seed(1)
> fac <- factor(sample(1:3, 10, replace = TRUE))
> model.matrix(~ fac - 1)
   fac1 fac2 fac3
1     1    0    0
2     0    1    0
3     0    1    0
4     0    0    1
5     1    0    0
6     0    0    1
7     0    0    1
8     0    1    0
9     0    1    0
10    1    0    0
attr(,"assign")
[1] 1 1 1
attr(,"contrasts")
attr(,"contrasts")$fac
[1] "contr.treatment"
于 2012-08-15T14:08:09.040 に答える