[英]convert a model.matrix in R to a group vector
在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
,並希望以某種方式操縱x
來獲得“分組矢量” grp.ids
。 我怎樣才能做到這一點? 謝謝!
我不相信你可以完全像最初創建的那樣恢復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)))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.