data.table(優れたパッケージ!!!)でいくつかの集計を行っていますが、.SD変数は多くのことに非常に役立つことがわかりました。ただし、グループが多い場合は、これを使用すると計算速度が大幅に低下します。例に従います:
# A moderately big data.table
x = data.table(id=sample(1e4,1e5,replace=T),
code=factor(sample(2,1e5,replace=T)),
z=runif(1e5)
)
setkey(x,id,code)
system.time(x[,list(code2=nrow(.SD[code==2]), total=.N), by=id])
## user system elapsed
## 6.226 0.000 6.242
system.time(x[,list(code2=sum(code==2), total=.N), by=id])
## user system elapsed
## 0.497 0.000 0.498
system.time(x[,list(code2=.SD[code==2,.N], total=.N), by=id])
## user system elapsed
## 6.152 0.000 6.168
私は何か間違ったことをしていますか?個々の列を優先して.SDを回避する必要がありますか?前もって感謝します。