这是我当前问题的简化版本。我需要从2个模型矩阵创建一个model.matrix,而不丢失"assign“中的信息。例如,考虑数据和公式
y<-rnorm(100); x1<-rnorm(100); x2<-rnorm(100); x3<-rnorm(100)
f1 <- y ~ x1 + x2 + x3和2个使用X1和X2创建的模型矩阵
trms<-terms.formula(f1)
trms2<-drop.terms(trms, dropx = 2)
trms3<-drop.terms(trms, dropx = -2)
X1<-model.matrix(trms2)
X2<-model.matrix(trms3)有没有一种简单的方法可以从X1和X2创建一个具有1个截距列和attr(,"assign")的矩阵X,该矩阵可以从f1获得
发布于 2018-08-26 02:42:49
如果我对问题的理解是正确的,那么简单直接的解释如何:
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
发布于 2018-08-26 02:47:27
我不能完全确定这是否是您想要做的,但是cbind()在这种情况下似乎工作得很好。
X <- cbind(X1, X2)
X <- X[, !duplicated(colnames(X))]然后,您可以连接来自X1和X2的属性。为了避免重复,您只能从X1中不存在的X2获取赋值信息:
attributes(X)$assign <- c(attr(X1,"assign"), attr(X2,"assign")[!attr(X2,"assign") %in% attr(X1,"assign")])如果这不是你想让我们知道的。
https://stackoverflow.com/questions/52020120
复制相似问题