目标是为数据框中的因子/字符串变量创建指标。该数据框的行数 > 2mm,并且在 Windows 上运行 R,我没有选择将 plyr 与 .parallel=T 一起使用。所以我用 plyr 和 reshape2 走“分而治之”的路线。
运行 melt 和 cast 耗尽内存,并使用
ddply( idata.frame(items) , c("ID") , function(x){
( colSums( model.matrix( ~ x$element - 1) ) > 0 )
} , .progress="text" )
或者
ddply( idata.frame(items) , c("ID") , function(x){
( elements %in% x$element )
} , .progress="text" )
确实需要一段时间。最快的方法是调用下面的 tapply。你有没有办法加快速度?%in% 语句比 model.matrix 调用运行得更快。谢谢。
set.seed(123)
dd <- data.frame(
id = sample( 1:5, size=10 , replace=T ) ,
prd = letters[sample( 1:5, size=10 , replace=T )]
)
prds <- unique(dd$prd)
tapply( dd$prd , dd$id , function(x) prds %in% x )