合并/合并模型矩阵

时间:2018-08-25 18:28:24

标签: r formula model.matrix

这是我当前问题的简化版本。我需要从2个模型矩阵创建一个model.matrix,而不丢失“赋值”中的信息。例如,考虑数据和公式

y<-rnorm(100); x1<-rnorm(100); x2<-rnorm(100); x3<-rnorm(100)
f1 <- y ~ x1 + x2 + x3

和使用

创建的2个模型矩阵X1X2
trms<-terms.formula(f1)
trms2<-drop.terms(trms, dropx = 2)
trms3<-drop.terms(trms, dropx = -2)
X1<-model.matrix(trms2)
X2<-model.matrix(trms3)

是否有一种简便的方法可以从X1X2创建具有1个拦截列并且具有X的矩阵attr(,"assign"),而该矩阵可以从{{1}获得}?

2 个答案:

答案 0 :(得分:0)

如果我正确理解了这个问题,那么简单直接的东西怎么样:

X3                <- cbind(X1[,1:2], X2[,2], X1[,3])
attr(X3,"assign") <- c(0,1,2,3)
colnames(X3)      <- c("Intercept",attr(trms, "term.labels"))
head(X3)
  Intercept          x1         x2         x3
1         1 -1.28372461 -0.2598796  0.3028496
2         1  0.56880875  0.2803302  0.7593734
3         1 -0.32480770 -1.6705911 -1.1750247
4         1 -1.02761734 -0.1405454 -0.6805033
5         1  0.84218452 -0.1224962 -1.3882420
6         1  0.07221231  0.5587801 -0.9042751

答案 1 :(得分:0)

我不确定这是否是您要尝试的方法,但是cbind()在这种情况下似乎可以正常工作。

X <- cbind(X1, X2)
X <- X[, !duplicated(colnames(X))]

然后可以从X1和X2连接属性。为了避免重复,您只能从X2获取尚未在X1中存在的分配信息:

attributes(X)$assign <- c(attr(X1,"assign"), attr(X2,"assign")[!attr(X2,"assign") %in% attr(X1,"assign")])

如果这不是您要让我们知道的。