首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用model.matrix生成截取结果?

如何使用model.matrix生成截取结果?
EN

Stack Overflow用户
提问于 2017-02-28 07:51:19
回答 1查看 867关注 0票数 1

函数stats::model.matrix可用于将输入数据帧转换为适合在求解回归方程等过程中进行原始代数处理的矩阵。例如:

代码语言:javascript
复制
set.seed(0)
df <- data.frame(a = rnorm(5), n = rnorm(5))
model.matrix(~., data = df)

产生:

代码语言:javascript
复制
  (Intercept)          a            n
1           1  1.2629543 -1.539950042
2           1 -0.3262334 -0.928567035
3           1  1.3297993 -0.294720447
4           1  1.2724293 -0.005767173
5           1  0.4146414  2.404653389

其中一个功能是它控制如何将截距添加到设计矩阵中。比较:model.matrix(~ 0 + ., data = df)model.matrix(~ 1 + ., data = df)

现在,公式中的.指定应该包括df的所有变量。当我希望传递一个空的数据帧,从而只创建拦截时,这会导致一个问题,例如:

代码语言:javascript
复制
df <- data.frame(matrix(, nrow=5, ncol=0))
model.matrix(~  ., data = df)

通向:

代码语言:javascript
复制
Error in terms.formula(object, data = data) : 
  '.' in formula and no 'data' argument

有没有人知道如何解决这个问题,具体地说,除了使用.之外,我想生成以下由model.matrix(~ 1, data = df)给出的结果。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-28 08:01:44

你可以这样做:

代码语言:javascript
复制
model.matrix(as.formula(paste0("~", colnames(df), "+1", collapse="+")), data=df)

但是,我认为使用if语句会更好。我认为R中的公式比任何基本的公式都更方便。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42497915

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档