【问题标题】:R: Expanding an R factor into dummy columns for every factor levelR:将 R 因子扩展到每个因子级别的虚拟列
【发布时间】:2014-04-12 17:56:24
【问题描述】:

我在 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 ... 

User 列不是唯一的,这意味着可以有几行具有相同的User。不管最终行数保持不变还是将具有相同User 的行合并为一行,其中的几列非空,计数为Codes。

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

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

谢谢!

【问题讨论】:

  • 如果我对您的理解正确,您想获取一个包含两列的数据框并为Code 中的因子水平添加858 - 1 虚拟变量列? ...为什么?
  • “R Studio 崩溃”是什么意思?有错误信息吗?您是否有足够的 RAM 用于 649226*859 data.frame?
  • @rawr,是的,你是对的。我想从recommenderlab 包中运行方法(例如Recommender)。他们正在描述你必须拥有这种用户项目购买矩阵来预测用户将来可以购买什么。第 21 页,[推荐实验室包] (cran.r-project.org/web/packages/recommenderlab/vignettes/…)
  • 查看库sampling中的命令disjunctive

标签: r bigdata categorical-data dummy-data model.matrix


【解决方案1】:

这对我来说非常有效:

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

唯一的问题是它产生了NAs,而不是0s,但这可以很容易地用这个来改变:

m[is.na(m)] <- 0

【讨论】:

  • 如果你想要 0 而不是 NA,请尝试填充选项:m &lt;- acast(data = d, User ~ Code, fill = 0)
猜你喜欢
  • 2014-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-09
  • 2019-01-27
  • 2011-06-30
相关资源
最近更新 更多