描述 我有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}
答案 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))