如何强制model.matrix使用所有级别的2个分类变量?

时间:2015-11-02 10:40:44

标签: r categorical-data

描述 我有2个分类变量,我想把它们变成列 - 每个类别只有一列

进度 简单的代码来实现这个:

d.data <- data.frame(a=as.factor(c("some1","some2","some3")), b = as.factor(c("other1","other3","other2")))
d.data.new <- data.frame(model.matrix(~a -1 + b -1, data=d.data))
names(d.data.new)
  

[1]&#34; asome1&#34; &#34; asome2&#34; &#34; asome3&#34; &#34; bother2&#34; &#34; bother3&#34;

&#34; -1&#34;仅适用于&#34; a&#34;变量由整个3级表示,但是&#34; b&#34;只有两个 - 我需要整整3个。 并不是真的没有理解&#34; -1&#34;在这种情况下适用于model.matrix内的{formula}

1 个答案:

答案 0 :(得分:1)

不是model.matrix解决方案,但您可以使用mtabulate

获取二进制输出
library(qdapTools)
mtabulate(as.data.frame(t(d.data)))

或者另一种选择是循环遍历'd.data'的列名,并在每列model.matrix上单独执行cbind并更改列名称(如果需要)。

d1 <- do.call(cbind,lapply(names(d.data), function(i) 
                      model.matrix(~get(i)-1, d.data)))
colnames(d1) <- sub('.*\\)', '', colnames(d1))