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

R:将R因子扩展为每个因子级别的虚拟列,r,bigdata,categorical-data,dummy-data,model.matrix,R,Bigdata,Categorical Data,Dummy Data,Model.matrix,我在R中有一个相当大的数据框架,有两列。我试图将code列(factor类型,858个级别)作为虚拟变量。问题是,当我尝试这样做时,R工作室总是崩溃 > 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 49

我在R中有一个相当大的数据框架,有两列。我试图将
code
列(
factor
类型,858个级别)作为虚拟变量。问题是,当我尝试这样做时,R工作室总是崩溃

> 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 ... 
User
列不是唯一的,这意味着可以有多行具有相同的
User
。不管最后行的数量是否保持不变,或者具有相同
User
的行是否合并到一行中,该行具有多个非空列,且计数为
code
s

我找到了两种解决方案,它们适用于较小的数据集,但不适用于我的数据集

  • 尝试使用
    model.matrix
    ,但R Studio刚刚崩溃

    m <- model.matrix( ~ Code, data = d)
    
    在这里找到

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


谢谢

这对我来说非常有效:

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

如果我理解正确的话,您希望获得一个包含两列的数据框,并为
code
中的因子级别添加
858-1
列虚拟变量。。。为什么?你说的“R工作室崩溃”是什么意思?是否有错误消息?您是否有足够的RAM用于649226*859数据帧?@rawr,是的,您是正确的。我想从
recommenderlab
包中运行方法(例如
Recommender
)。他们描述的是,你必须拥有这种用户物品购买矩阵,才能预测用户未来可以购买什么。第21页,[recommenderlab package]()查看库中的命令
析取
采样如果您想要0而不是NAs,请尝试填充选项:
m
library(reshape2)
m <- acast(data = d, User ~ Code)
m[is.na(m)] <- 0