R:将 R 因子扩展为每个因子级别的虚拟列

2023-12-07

我在 R 中有一个相当大的数据框,有两列。我正在努力摆脱Code柱子 (factor输入 858 个级别)虚拟变量。问题是,当我尝试这样做时,R Studio 总是崩溃。

> str(d)
'data.frame':   649226 obs. of  2 variables:
 $ User: int  210 210 210 210 269 317 317 317 317 326 ...
 $ Code      : Factor w/ 858 levels "AA02","AA03",..: 164 494 538 626 464 496 435 464 475 163 ... 

The User列不是唯一的,这意味着可以有多个行具有相同的列User。最终行数保持不变或行数相同并不重要User合并为一行,其中有几列非空,计数为Codes.

我发现了一些适用于较小数据集的解决方案,但不适用于我的数据集。

  • 尝试使用model.matrix,但是 R Studio 就崩溃了

    m <- model.matrix( ~ Code, data = d)
    

    在这里找到自动将 R 因子扩展为每个因子水平的 1/0 指标变量的集合

  • Tried for循环与ifelse,但是代码运行了 4 个小时,然后我注意到 R Studio 崩溃了。

    for (t in unique(d$Code)) {
      d[paste("Code", t, sep = "")] <- ifelse(d$Code == t, 1, 0)
    }
    

    在这里找到从分类变量创建新的虚拟变量列

如果您能为我推荐一些快速且适用于此类数据的方法,那就太好了。

Thanks!


这对我来说非常有效:

library(reshape2)
m <- acast(data = d, User ~ Code)

唯一的事情是它产生了NAs,而不是0s,但这可以很容易地改变:

m[is.na(m)] <- 0
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

R:将 R 因子扩展为每个因子级别的虚拟列 的相关文章

随机推荐