我在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
的行被合并到一行中,并且具有多个非空的列且计数为Code
,则无关紧要。
我找到了几个适用于较小数据集的解决方案,但不适用于我的解决方案。
尝试使用model.matrix
,但R Studio只是崩溃了
m <- model.matrix( ~ Code, data = d)
用for
尝试ifelse
循环,但代码运行了4个小时,然后我注意到R Studio崩溃了。
for (t in unique(d$Code)) {
d[paste("Code", t, sep = "")] <- ifelse(d$Code == t, 1, 0)
}
在此处找到Create new dummy variable columns from categorical variable
如果您可以向我推荐一些快速且适用于此类数据的方法,那就太棒了。
谢谢!
答案 0 :(得分:2)
这完全适合我:
library(reshape2)
m <- acast(data = d, User ~ Code)
唯一的问题是它产生了NA
s而不是0
s,但这可以很容易地改变:
m[is.na(m)] <- 0