首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >model.matrix删除列

model.matrix删除列
EN

Stack Overflow用户
提问于 2016-02-26 11:05:53
回答 1查看 1.3K关注 0票数 0

我有一个数据框架,我想用它来生成一个设计矩阵。

代码语言:javascript
复制
>ct<-read.delim(filename, skip=0, as.is=TRUE, sep="\t", row.names = 1)
> ct
      s2 s6 S10 S14 S3 S7 S11 S15 S4 S8 S12 S16
group  1  1   1   1  2  2   2   2  3  3   3   3
donor  1  2   3   4  1  2   3   4  1  2   3   4
>factotum<-apply(ct,1,as.factor) # to turn rows into factors. 
>design <- model.matrix(~0 + factotum[,1] + factotum[,2])

最后,我将生成一个字符串并使用as.formula(),而不是硬编码公式。无论如何,这是可行的,并产生一个设计矩阵。不过,它省略了一列。

代码语言:javascript
复制
>design
   factotum[, 1]1 factotum[, 1]2 factotum[, 1]3 factotum[, 2]2 factotum[, 2]3 factotum[, 2]4
1               1              0              0              0              0              0
2               1              0              0              1              0              0
3               1              0              0              0              1              0
4               1              0              0              0              0              1
5               0              1              0              0              0              0
6               0              1              0              1              0              0
7               0              1              0              0              1              0
8               0              1              0              0              0              1
9               0              0              1              0              0              0
10              0              0              1              1              0              0
11              0              0              1              0              1              0
12              0              0              1              0              0              1

根据我的推理,列名应该是: factotum,11 factotum,12 factotum,13,factotum,21,factotum,22 factotum,23 factotum,24。这些将重命名为group1、group2、group3、donor1、donor2、donor3、donor4。

这意味着21岁的事实,或donor1,丢失了。我在做什么,这会丢失吗?任何帮助都将不胜感激。

干杯本。

EN

回答 1

Stack Overflow用户

发布于 2016-02-27 06:30:05

这里有几件事。

(1) apply(ct,1,as.factor)不一定将行转换为因子。尝试str(factotum),您将看到它失败了。我不确定最快的方法是什么,但这应该是可行的:

代码语言:javascript
复制
factotum <- data.frame(lapply(data.frame(t(ct)), as.factor))

(2)由于您使用的是因子,因此model.matrix会创建虚拟编码。在本例中,donor有四个值。如果您是2,那么您将在factotum[,2]2列中获得一个1。如果您是34,您将在它们各自的列中获得一个1。如果你是1,那又如何呢?好吧,这仅仅意味着您在所有三列中都是0。这样,您只需要三列即可创建四个组。donor的值1在这里称为参考组,它是与其他组进行比较的组。

(3)所以现在的问题是……为什么group (或factotum[,1])不能只有两列?我们可以很容易地编写三个级别的两列代码,对吗?好吧..。是的,这正是您使用以下命令时发生的情况:

代码语言:javascript
复制
design <- model.matrix(~ factotum[,1] + factotum[,2])

但是,由于您指定没有截取,因此您将获得一个额外的group列。

(4)通常你不必自己创建设计矩阵。我不确定您下一步要使用哪个函数,但在大多数情况下,函数会为您处理它。

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

https://stackoverflow.com/questions/35642668

复制
相关文章

相似问题

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