【问题标题】:how to force model.matrix to use all levels of 2 categorical variables?如何强制 model.matrix 使用所有级别的 2 个分类变量?
【发布时间】:2015-11-02 10:40:43
【问题描述】:

说明 我有 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] “asome1” “asome2” “asome3” “bother2” “bother3”

“-1”仅适用于由整个 3 个级别表示的“a”变量,但“b”只有两个 - 我需要整个 3。 在这种情况下,对于 model.matrix 中的 {formula} ,“-1”是如何工作的

【问题讨论】:

    标签: r categorical-data


    【解决方案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))
    

    【讨论】:

      猜你喜欢
      • 2015-04-20
      • 2019-06-19
      • 2018-11-19
      • 1970-01-01
      • 2016-06-16
      • 2019-08-15
      • 2020-11-13
      • 2015-11-26
      相关资源
      最近更新 更多