【问题标题】:model.matrix with assigned valuesmodel.matrix 赋值
【发布时间】:2016-01-14 05:26:12
【问题描述】:

假设我有以下data.frame:

df=data.frame(cat=c("a","b","c"),y=c(1,2,3))

获取类别(cat)的model.matrix,将它们转换为虚拟变量,如下所示:

model.matrix(~0+cat,df)


 cata catb catc
1    1    0    0
2    0    1    0
3    0    0    1
attr(,"assign")
[1] 1 1 1
attr(,"contrasts")
attr(,"contrasts")$cat
[1] "contr.treatment"

但是,我希望将这些虚拟变量分配给 df$y 中的值。我能想到的一种可能的解决方案是与 y 相乘。

但是,我猜有更好的专用功能?

那么基本上,将虚拟变量转换为给定向量的最有效方法是什么?

【问题讨论】:

    标签: r model.matrix


    【解决方案1】:

    也许我们可以试试

    library(reshape2)
    acast(df, cat~y, value.var="y", fill=0)
    #  1 2 3
    #a 1 0 0
    #b 0 2 0
    #c 0 0 3
    

    或使用model.matrix

    model.matrix(~0 + cat, df) *df$y
    

    【讨论】:

    • 似乎是显而易见的答案。确实有人想知道。
    • 第一种方法是否被认为是更有效的方法。特别是考虑到没有乘法运算?
    • @Sachin_ruk 如果您使用来自library(data.table)dcast,它会更有效。但是,您可以在更大的数据集上使用 library(microbenchmark) 进行基准测试,看看哪个是有效的。
    猜你喜欢
    • 1970-01-01
    • 2011-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-02
    • 2019-10-06
    • 2021-03-01
    • 2015-04-02
    相关资源
    最近更新 更多