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.ids通过某种方式操作来获得“分组向量” x。我怎样才能做到这一点?谢谢!

4

1 回答 1

3

我不相信您可以完全按照最初创建的方式恢复 grp.id,因为无法判断 id 的原始值是什么。您可以创建一个导致相同 model.maxtrix 的向量。

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

但是,在这种特殊情况下,这非常接近。


前一个标签的顺序为 1、3、2(而不是所需的 1、2、3),这是因为我们得到“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 回答