将R中的model.matrix转换为组向量

时间:2012-11-17 21:40:28

标签: r

在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。我怎样才能做到这一点?谢谢!

1 个答案:

答案 0 :(得分: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)))