我在 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
合并为一行,其中有几列非空,计数为Code
s.
我发现了一些适用于较小数据集的解决方案,但不适用于我的数据集。
-
尝试使用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)
唯一的事情是它产生了NA
s,而不是0
s,但这可以很容易地改变:
m[is.na(m)] <- 0
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)