您好,我试着加快ddly功能。
这是我使用的(大)数据集:
df<-data.frame(code_client=as.factor(sample(177563:(1013643+177563),810805,T)),annee=sample(c(2012,2013),810805,T))
首先尝试:
system.time(ca_annee1<- ddply(.data = df,
.variables = .(code_client,annee),
.fun=nrow,
.progress = progress_text(char = ".")))
# user system elapsed
# 1439.278 1.774 1441.876
它真的很慢,我只想计算clode_client和annee之间的每个组合。
我试图使用我的4个核心:
library(doSNOW)
registerDoSNOW(makeCluster(4, type = "SOCK"))
system.time(ca_annee2<- ddply(.data = df,
.variables = .(code_client,annee),
.fun=nrow,
.parallel=TRUE))
#user system elapsed
#2054.860 13.618 2080.125
Tt的速度更慢,为什么? (我的核心在计算期间全部为100%)
无论如何,我找到了一种更快速(非常即时)的方法:
ca2013<-data.frame(nombre_visite=summary(subset(df,annee==2013)$code_client,maxsum=9e9))
ca2013$code_client<-rownames(ca2013)
ca2013$annee<-2013
ca2012<-data.frame(nombre_visite=summary(subset(df,annee==2013)$code_client,maxsum=9e9))
ca2012$code_client<-rownames(ca2012)
ca2012$annee<-2012
ca_annee3<-rbind(ca2012,ca2013)
但我想找到一种方法来使用ddply(或agregate,或者通过或应用wathever),因为摘要技巧在其他情况下不会正常。
所以有人理解为什么这个并行方法更慢?有人给我一些提高plyr功能的技巧吗?
此致