0

この関数「ステータス」が適用される約25L行の大規模なデータセットがあります。そのフラグ手順。fn 内では、演算がベクトル化され、適用関数が使用されます。c1-c4 は私のデータの列です。それでも、fn の実行には約 5 ~ 6 時間かかります。

status(mydata)
status <- function (x) {  

x<- subset(x, x$RECORD_TYPE != "INPUT")
x$c1<- as.character(x$c1)
x$c2 <- as.factor(x$c2)
x$c3 <- as.factor(x$c3)
return ( data.frame(cbind( 
         tapply(x$c2,  x$c4, 
           function (x) ifelse (!(any(x=="BAD")), "G", sum(x== "BAD"))) ,
         tapply(x$c2D,  x$c4, 
            function (x) sum (x== "NEG"))  ))) 
                 }  

fnをさらに高速化する方法はありますか。私は 16 コアのサーバーで作業しています。だから、もっとスピードアップできると思います。

4

1 に答える 1

0

おそらく、data.tableコードを並列化するよりもアプローチの方が速いでしょうが、この回答があなたの質問に確実に対処するためには、データのサンプルが必要です。

library(data.table)

setDT(mydata)

mydata[ RECORD_TYPE != "INPUT", 
                   .(var1 = ifelse (!(any(c2=="BAD")), "G", sum(c2== "BAD")),
                     var2 = sum (c2D== "NEG")), by= c4]
于 2016-06-21T13:44:11.513 に答える